[英]How should I format data for a Kinesis event when using Amazonica in Clojure?
當我使用 AWS CLI 將事件放入流中時,我可以在從 base64 解碼后傳入 JSON 並將其取回。 當我嘗試使用來自 Clojure 的 Amazonica 放置事件時,我很難正確格式化事件數據參數。
(kinesis/put-record "ad-stream" {:ad-id "some-id"} "parition-key"))
創建一個帶有 base64 編碼數據字段"TlBZCAAAABXwBhsAAAACagVhZC1pZGkHc29tZS1pZA=="
的事件,該事件解碼為
NP�jad-idisome-id
如果我首先對數據進行 JSON 編碼:
(kinesis/put-record "ad-stream" (json/write-str {:ad-id "some-id-2"}) "parition-key")
然后我得到一個垃圾字符較少的事件,但它仍然不是很完美,不足以在不破壞某些東西的情況下在其他應用程序中閱讀:
NPi{"ad-id":"some-id-2"}
在將 Clojure 映射轉換為 JSON 時,那個領先的垃圾有什么意義? 如何將一個簡單的對象傳遞給 kinesis?
測試顯示普通地圖作為put-record
的數據參數傳遞,我還不明白為什么這對我不起作用:
(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))
更新
我很確定這是庫(或它使用的序列化程序)中的錯誤,因此我將在https://github.com/mcohen01/amazonica/issues/211 上的錯誤報告中繼續調查。
傳遞 JSON 字符串的ByteBuffer
作為記錄數據對我有用。
(kinesis/put-record "ad-stream"
(-> {:ad-id "ad-stream"}
json/write-str .getBytes ByteBuffer/wrap)
"parition-key")
記錄數據: "eyJhZC1pZCI6ImFkLXN0cmVhbSJ9"
,解碼為:
{"ad-id":"ad-stream"}
這可以解決庫中的任何編碼問題,因為 Amazonica 在傳遞ByteBuffer
時會跳過編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.