ZeroMQ正在丢弃消息

问题描述

我正在使用ZeroMQ在多个服务之间进行通信。我遇到了一个问题,我正在发送答复,但始终无法联系到呼叫者。我做了很多调试,无法弄清楚发生了什么。最终,我减小了消息的大小(我正在返回查询结果),并且消息开始传入。然后,我增加了JVM的内存大小,并且原始消息开始返回。

这使我相信消息太大而无法容纳到内存中,而ZeroMQ只是丢弃了它们。我的问题是,我该如何正确调试呢? ZeroMQ是否输出任何日志或内存转储?

我正在使用Java版本的ZeroMQ。

解决方法

Q “ ...我该如何正确调试?”

好吧,如果有人知道本地ZeroMQ API设置,至少知道了缓冲“机械”和一对{ SNDHWM | RCVHWM }硬性限制,则可以进行一些试错测试用于微调这些参数。

Q “ ZeroMQ是否输出任何日志或内存转储?”

嗯,不,原生ZeroMQ从来没有尝试过这样做。 ZeroMQ概念的关键优先级是几乎线性可扩展的性能,并且Zen-of-Zero反映了排除任何单个操作的情况,这不支持在最小的低延迟范围内实现这一目标。

但是,较新版本的本机API提供了一个名为socket-monitor的工具。如果有需要,这可以帮助您编写自己的内部套接字事件的分析器。

我在ZeroMQ工作11年以上,从未使我陷入无法解决的困境。最好获得Context()-instance和Socket()-instance参数所需的见解,它们将更好地配置L3,协议相关和O / S相关的缓冲属性(其中一些不需要存在)在Java绑定中,原生API尽最大可能显示ZeroMQ数据泵送引擎的所有可能的和可调整的参数。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...