0

如果我设置了一个跨集群分配负载的管道,我想记录消息的发送位置。这就是我的想法(python):

import zmq
context = zmq.Context()
socket = context.socket(zmq.DOWNSTREAM)
socket.connect("tcp://127.0.0.1:5000")
socket.connect("tcp://127.0.0.1:6000")

msg = "Hello World\0"
connection_string = socket.send(msg)
# should print "Sent message to tcp://127.0.0.1:5000"
print "Sent message to", connection_string

但我找不到任何谈论这个的东西。任何帮助都将不胜感激。

4

3 回答 3

0

也许您可以在回复中包含收件人的地址并记录它?

于 2010-10-07T06:07:28.853 回答
0

我的 0.02 美分...

好吧,我相信由于 ZMQ 以公平队列方式路由,那将是循环法。因此,消息将按顺序发送给接收者。但是,在这种假设下编写代码并不是正确的事情,因为底层路由逻辑可能会在未来的版本中发生变化。

对于 PUSH/PULL,我不确定,但是对于 REQ/REP,我猜 REP 方可以将回复以第一个字段作为其地址的信封发送回。这样,REQ 可以在套接字上读取两次并获取响应者地址和数据。

于 2010-12-08T04:08:50.083 回答
0

它认为您需要为此在拓扑中的某处使用 X(REP|REQ) 套接字。您可能想检查受监控的队列设备:http: //github.com/zeromq/pyzmq/blob/master/zmq/devices.pyx

对于一般信息,请查看此处的模式图和解释:http: //ipython.scipy.org/doc/nightly/html/development/parallel_connections.html

另请注意,DOWNSTREAM 套接字类型现在称为 PUSH(并且相应的 UPSTREAM 已更改为 PULL)。

于 2010-10-01T13:37:41.187 回答