代码序列化从Clojure反序列化

时间:2014-02-13 14:49:29

标签: clojure protocol-buffers zeromq

我在这里的例子http://patternhatch.com/2013/06/12/messaging-using-clojure-and-zeromq/

我已经确认我可以序列化MarketData并为其构建了protobuf。

我没有使用chesire序列化,而是决定尝试我新学到的protobuf序列化知识。当我将该示例中的函数修改为其gpb版本时,当我运行

(future-call market-data-publisher-gpb)

好像没问题。但是,当我运行客户端

(get-market-data-gpb 100)

什么都没发生。我有两个问题:

1)Clojure是否有某种图形或其他调试器? 2)如果有人可以指出我正确的方向,我在修改过的例子中做错了什么也会有所帮助。

我似乎记得在ZMQ上使用[protobuf]二进制数据有效负载需要一组不同的呼叫?

(ns clj-zmq.core
  (:import [org.jeromq ZMQ])
)

(use 'flatland.protobuf.core)

(import com.example.Example$MarketData)
(def MarketData (protodef Example$MarketData))


(def ctx (ZMQ/context 1))

(defn market-data-publisher-gpb
[]
  (let [s (.socket ctx ZMQ/PUB)
        market-data-event (fn []
                            {:symbol (rand-nth ["CAT" "UTX"])
                             :size (rand-int 1000)
                             :price (format "%.2f" (rand 50.0))})]
    (.bind s "tcp://127.0.0.1:6666")
    (while :true
      (.send s ( protobuf-dump(market-data-event))))))

; Client
(defn get-market-data-gpb
  [num-events]
  (let [s (.socket ctx ZMQ/SUB)]
    (.subscribe s "")
    (.connect s "tcp://127.0.0.1:6666")
    (dotimes [_ num-events]
      (println (protobuf-load MarketData (.recv s))))
    (.close s)))

1 个答案:

答案 0 :(得分:0)

Eclipse逆时针和IntelliJ Cursive都有Clojure调试支持。

此外,您的地址看起来很糟糕 - 应该是" tcp://127.0.0.1:6666"。