MQTT业务微服务重启后接收不到订阅(接收)消息

文章简述:服务器上配置并启动MQTT的服务器。MQTT客户端(微服务) 和 客户端(人脸识别机) 正常的建立了连接,微服务可以订阅到人脸识别机的消息。

如果有歧义或者更好的解决办法,希望可以评论交流交流!!!

正常连接,clientId 名为zsccds-client

问题:当发布线上环境,重启微服务后,微服务订阅消息, 然后人脸识别机下发订阅后,微服务不能订阅(接收)到消息。

我初步判断的原因是

Durable Subs一直连上未清除,因为我设置了connOpts.setCleanSession(false);

CLIENT_ID是zsccds-client,然后导致原本创建的客户端zsccds-client一直和人脸识别机客户端进行连接,占用中

// MQTT 连接选项
MqttConnectOptions connOpts = new MqttConnectOptions();
// 设置认证信息
connOpts.setUserName(MqttConfig.USERNAME);
connOpts.setPassword(MqttConfig.PASSWD.toCharArray());
connOpts.setCleanSession(false);
//  持久化
MemoryPersistence persistence = new MemoryPersistence();
// MQ客户端建立
client = new MqttClient(MqttConfig.IP_ADDRESS, MqttConfig.CLIENT_ID, persistence);
// 设置回调
client.setCallback(new MqttHandle());
// 建立连接
client.connect(connOpts);

微服务重启后连上mqtt后,发现Durable Subs里面有两种情况:

(1)多了一个新的连接,clientId是zsccds-client加一段数字这里就不知道为什么会生成这个clientId,我设置的clientId是zsccds-client!!!

(2)或者是原来的zsccds-client,但是重启完的微服务实际却没有连上zsccds-client应该是上一个占用的着的一条连接。

解决方法:

(1)我尝试将占用的zsccds-client进行删除。这里勾选,会出现一个Delete按钮。

producers是两部人脸识别机,consumers是微服务。

然后让微服务自动重连或者重启,之后微服务和人脸识别机又可以正常连接,正常下发和订阅。

弊端:使原来zsccds-client连接中的人脸识别机断掉,可能会使下发待消费的消息给清空掉。

(2)解决方法2,这个方法没有实验,猜想的缘由是断开Durable Subs中的consumers,在重启微服务之前,可以用请求接口进行 client.disconnect(),不重连,然后进行微服务重启, 重启完让微服务进行自动与mqtt连接。

Mqtt服务器下载&配置简述icon-default.png?t=N7T8https://blog.csdn.net/qq_39625703/article/details/132865717

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值