ZeroMQ可以计算未完成消息的数量吗?

时间:2017-02-19 14:27:23

标签: zeromq publish-subscribe

我是ZeroMQ的新手(在C ++上)。?br: 在编写带有 PUB/SUB 正式沟通模式原型的程序时,我遇到了问题。

计划
这是我的项目,我想尽可能多地向 PUB 发送消息。
为此,我曾使用 ROUTER 套接字类型。

问题
接收器很慢,因为消息排队(直到达到高水位),然后开始在SUB侧下降。

寻找
我想要一个来自ZeroMQ(在C ++上)的方法,它告诉我“未完成队列中的消息计数”。

搜索了很多,但没有找到任何答案 我正在寻找任何类型的指针或帮助。

2 个答案:

答案 0 :(得分:1)

找到答案。在路由器类型下使用3参数,我能够解决它。 在zmq.hpp中我们发送(直到router-> send方法)。 在路由器级别,我们有多个检查(如队列已满或数据包未送达等) 如果我们设置* router mandator / sendtimeout(-1)/并使用dontwait发送数据包,那么zmq send将处理所有错误/重试(包括zmq队列完全或HWM命中)。

答案 1 :(得分:0)

听起来您正在使用异步消息传递。这意味着发送方将不知道消息到达和/或排队。您是否可以尝试使用静态计数器,每次发送者发送消息时您都会递增,而另一个静态变量会在接收者收到消息时递增?根据这两者的不同,应该告诉您有多少消息可能排队。它可能会给你更多的洞察力,虽然这应该是实验性的,因为它不安全。您应该关注的是优化SUB,以便它不会丢弃任何消息。检查费率,看看你是否可以解决这个问题。或者,如果处理导致延迟,您可以创建自己的缓冲区,用于存储传入的消息。