在分布式负载管道中使用zeromq,如何获取消息发送至最后一个服务器的地址

0 投票
3 回答
1003 浏览
提问于 2025-04-16 04:50

如果我建立了一个可以在集群中分配负载的管道,我想记录消息发送到哪里。这是我想到的(用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

但是我找不到任何相关的信息。任何帮助都非常感谢。

3 个回答

0

我有一点小看法...

我认为因为ZMQ的路由是公平排队的,所以这就像是轮流发送消息。因此,消息会按照顺序发送给接收者。不过,假设代码是基于这个前提来写的就不太对,因为底层的路由逻辑可能在未来的版本中会改变。

关于PUSH/PULL,我不太确定,但对于REQ/REP,我猜REP那一方可以把回复放在一个信封里,信封的第一个字段是它的地址。这样REQ就可以在套接字上读取两次,得到回应者的地址和数据。

0

也许你可以在回复中加入收件人的地址,然后记录下来?

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。

撰写回答