Python ZMQ PULL与PUSH socket收发速率不一致相关问题咨询
PUSH/PULL 套接字缓存与消息消费问题解答
问题1:PUSH socket终止运行但PULL socket仍保持运行,PULL socket是否还能收到剩余的消息?
答案分两种场景:
- 如果剩余消息已经完成从PUSH进程的用户态发送队列到内核网络缓冲区、或者已经传输到PULL端的套接字接收缓冲区,那么即使PUSH进程终止,这部分消息依然可以被PULL端正常消费。
- 你描述的场景中100秒仅成功传输10条消息,剩下90条消息绝大多数会停留在PUSH进程的ZeroMQ用户态发送队列中,这部分数据会随PUSH进程终止被操作系统回收,PULL端无法收到这部分消息。
问题2:当无接收方取消息时,PUSH socket可缓存的消息数量是否存在上限?
存在明确上限,相关规则如下:
- PUSH端的最大缓存消息数由ZeroMQ的
ZMQ_SNDHWM(发送高水位标记)套接字选项控制,默认值为1000。 - 当发送队列中积压的消息数达到
ZMQ_SNDHWM设置的阈值后,后续的send操作会进入阻塞状态,或者在非阻塞模式下返回EAGAIN错误,不再接受新的消息入队。 - 除了ZeroMQ用户态队列的限制,操作系统内核的套接字发送缓冲区也有容量上限,同样会限制实际可缓存的消息总规模。
内容的提问来源于stack exchange,提问作者aman agarwal
相关产品推荐
相关产品推荐

