首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Clojure中使用Amazonica时,我应该如何格式化Kinesis事件的数据?

在Clojure中使用Amazonica时,我应该如何格式化Kinesis事件的数据?
EN

Stack Overflow用户
提问于 2016-05-11 12:06:00
回答 1查看 1K关注 0票数 2

当我使用AWS将一个事件放入流中时,我可以在从base64解码之后传入JSON并将其取出。但是,当我试图使用Clojure中的Amazonica放置一个事件时,我很难正确地格式化事件数据参数。

代码语言:javascript
复制
(kinesis/put-record "ad-stream" {:ad-id "some-id"} "parition-key"))

创建一个具有base64编码的"TlBZCAAAABXwBhsAAAACagVhZC1pZGkHc29tZS1pZA=="数据字段的事件,该字段将解码为

代码语言:javascript
复制
NP�jad-idisome-id

如果我首先对数据进行JSON编码:

代码语言:javascript
复制
 (kinesis/put-record "ad-stream" (json/write-str {:ad-id "some-id-2"}) "parition-key")

然后,我得到了一个垃圾字符较少的事件,但它仍然不太完美,不足以在其他应用程序中阅读而不破坏一些东西:

代码语言:javascript
复制
NPi{"ad-id":"some-id-2"}

当将Clojure映射转换为JSON时,这种领先的垃圾有什么意义?如何将一个简单的物体传递给运动?

测试显示一个作为put-record的数据参数传递的普通地图,我还不明白为什么这对我不起作用:

代码语言:javascript
复制
  (let [data {:name "any data"
              :col  #{"anything" "at" "all"}
              :date now}
        sn (:sequence-number (put-record my-stream data (str (UUID/randomUUID))))]
    (put-record my-stream data (str (UUID/randomUUID)) sn))

  (Thread/sleep 3000)

  (def shard (-> (describe-stream my-stream)
               :stream-description
               :shards
               last
:shard-id))

更新

我很确定这是库中的一个bug (或者它使用的序列化程序),所以我在https://github.com/mcohen01/amazonica/issues/211的一个bug报告中继续调查。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-12 08:44:08

将JSON字符串的ByteBuffer作为记录数据传递给我。

代码语言:javascript
复制
(kinesis/put-record "ad-stream"
                    (-> {:ad-id "ad-stream"}
                        json/write-str .getBytes ByteBuffer/wrap)
                    "parition-key")

记录数据:"eyJhZC1pZCI6ImFkLXN0cmVhbSJ9",它解码为:

代码语言:javascript
复制
{"ad-id":"ad-stream"}

这可以解决库中的任何编码问题,因为Amazonica在传递ByteBuffer时跳过编码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37162175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档