- sub在一段时间后出现收不到消息的情况
现象: pub/sub使用tcp通信,sub订阅了所有消息,开始正常 ,一段时间后收不到消息。
可能原因:因为pub是bind, sub是connect, pub与sub之间网络中断过(两地之间切换了链路),可能中断这段时间, pub连续发送消息都不成功,操作系统层套节字关闭。由于中间网络不通,FIN没到到达对方,sub的操作系统套节字并没有收到,也就不会出现问题而重连,操作系统套节字仍然是合法的,只是没有数据到达。当网络恢复后,sub仍然用之前的套节字收消息,此时pub上已经没有该连接了,所以sub也就无法收到消息。(如果底层套节字有设keepalive,2小时后会发现?)
解决方法:
(1)自定义心跳,sub一段时间没有收到报文,重新创建。
(2)pub做connect, sub做bind
=======================
找到了一个相似的:
https://grokbase.com/t/zeromq/zeromq-dev/135gdn00cn/help-on-the-pub-sub-socket-reconnection
- PUB发送后立刻退出,SUB收不到消息
现象:一个PUB测试程序,PUB作为connect端, 连接-发送消息-退出,对端SUB收不到消息。即使发送消息后,sleep一段时间,对端仍收不到消息。
原因:虽然已调用connect, 但在发送消息时,底层的操作系统层的发送可能还没建好,消息直接被丢弃了。
解决方案:采用PUSH/PULL机制。
zmq学习中的问题
最新推荐文章于 2024-03-25 00:02:13 发布