如何解决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数据泵送引擎的所有可能的和可调整的参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。