Node JS mqtt client doesn#39;t received subscribed messages when broker goes down and comes up(当Broker关闭和启动时,节点JS MQTT客户端没有接收到SUBSCRIBED消息)
问题描述
我已经创建了一个MQTT节点js客户端。我的连接选项如下。
mqttOptions = {
clientId: '100',
keepAlive: 1000,
clean: false,
reconnectPeriod: '1000',
will: willMessage
};
我断开了服务器的连接,并在客户端仍在运行时将其重新启动。客户端具有每1秒发布一次的逻辑。虽然客户端在此重新连接后正在发布,但它没有收到该消息。它订阅了自己的消息主题。既然我将CLEAN选项设置为FALSE,它是否应该订阅重新连接上的主题并开始接收它们?
下面是我建立连接的方式。
this.client = mqtt.connect(url, mqttOptions);
下面是我订阅的方式。
this.client.subscribe(topic);
我在这里做错了什么?请指教。
emq
我们在使用推荐答案作为代理和使用NodeJS的MQTT库时遇到了这个问题。当它是蚊子作为经纪人时,客户重新连接并获得它订阅的所有消息。但是,如果它再次订阅,它将获得同一消息的n个副本。根据库文档,建议检查以前订阅的connack和connack.sessionPresent。
我们订阅了客户端的所有事件,发现offline是Broker宕机时调用的事件。然后调用reconnect和close,直到代理启动。因此,我们是这样做的。在offline、end客户端上强制创建一个新客户端,并在结束时创建一个新客户端-与创建客户端时使用的函数相同:
doConnect() {
    this.client = mqtt.connect('mqtt://myhost', this.myOptionsIfAny);
    this.client.on('connect', () => {
        this.client.subscribe('mytopics');
        this.client.on('message', (topic, message) => {
            // do processing
        });
        this.client.on('offline', () => {
            this.client.end(true, () => {
                doConnect();
            });
    });
}
                        这篇关于当Broker关闭和启动时,节点JS MQTT客户端没有接收到SUBSCRIBED消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:当Broker关闭和启动时,节点JS MQTT客户端没有接收到SUBSCRIBED消息
				
        
 
            
        - 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
 - CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
 - Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
 - Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
 - Flexslider 箭头未正确显示 2022-01-01
 - 400或500级别的HTTP响应 2022-01-01
 - 失败的 Canvas 360 jquery 插件 2022-01-01
 - addEventListener 在 IE 11 中不起作用 2022-01-01
 - Fetch API 如何获取响应体? 2022-01-01
 - 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
 
						
						
						
						
						