【发布时间】:2014-10-07 20:58:16
【问题描述】:
我有一个使用 PUB/SUB 设置从 ZeroMQ 发布者获取消息的应用程序。阅读器有时很慢,所以我在发送者和接收者上都设置了 HWM。我希望接收器从处理减速中恢复时会填满缓冲区并跳起来赶上。但我观察到的行为是它永远不会下降! ZeroMQ 似乎忽略了 HWM。我做错了吗?
这是一个最小的例子:
publisher.py
import zmq
import time
ctx = zmq.Context()
sock = ctx.socket(zmq.PUB)
sock.setsockopt(zmq.SNDHWM, 1)
sock.bind("tcp://*:5556")
i = 0
while True:
sock.send(str(i))
print i
time.sleep(0.1)
i += 1
订阅者.py
import zmq
import time
ctx = zmq.Context()
sock = ctx.socket(zmq.SUB)
sock.setsockopt(zmq.SUBSCRIBE, "")
sock.setsockopt(zmq.RCVHWM, 1)
sock.connect("tcp://localhost:5556")
while True:
print sock.recv()
time.sleep(0.5)
【问题讨论】:
-
澄清一下,您是说您的订阅者收到了一串从未跳过的完整数字吗?
-
@Jason 是正确的。我不会丢失一条消息。
-
发送快点有区别吗?快得多,例如仅每 1000 条消息进行一次睡眠。
-
我将发布者的延迟更改为 0,订阅者的延迟为 1 秒,并让它运行 25 分钟。仍然不要丢弃一条消息。