ZeroMQ PUSH/PULL模式如何查询发送缓冲区队列中的待处理事件
ZeroMQ PUSH/PULL 模式待发队列回调问题解答
核心结论
ZeroMQ原生未提供PUSH/PULL模式下,在应用退出、定时回调或收到信号时获取待处理队列事件通知的相关能力。其内部消息队列属于库内部私有实现,没有对外暴露可直接读取积压消息、或触发队列相关回调的接口。
原生支持的队列可靠性优化能力
你可以使用ZeroMQ本身提供的以下参数降低发送队列的消息丢失概率,不需要额外的应用层逻辑:
ZMQ_LINGER:该参数控制套接字关闭时待发队列的保留时长。你可以在进程收到退出信号时主动调用zmq_close()关闭PUSH套接字:- 设置为大于0的正整数时,ZeroMQ会最多阻塞指定毫秒数,直到队列中所有积压消息发送完成再销毁资源
- 设置为
-1(默认值)时,会无限阻塞直到所有消息发送完成 - 设置为
0时,会直接丢弃所有队列消息立即退出
ZMQ_SNDTIMEO:配置send()方法的最大阻塞时长,超时后方法会返回错误,你可以在此时处理当前待发送的消息,避免进程被强制杀死导致消息丢失ZMQ_IMMEDIATE:开启后消息不会加入到未建立连接的对端的队列中,避免消息积压在不可达的对端队列中
补充说明
目前ZeroMQ官方没有提供超出上述参数之外的PUSH/PULL队列控制能力,如果需要实现更精准的死信队列、未处理消息回调等能力,还是需要在应用层自行实现。
内容的提问来源于stack exchange,提问作者psykidellic
相关产品推荐
相关产品推荐

