当前位置: 首页 > 知识库问答 >
问题:

MQTT客户端连接丢失在重新连接到代理后不工作

倪阳飇
2023-03-14
@Override
public void connectionLost(Throwable cause) {
    // TODO Auto-generated method stub
    reconnectStatus = 0;

    executor.scheduleAtFixedRate(reconnectRunnable, 0, 5, TimeUnit.SECONDS); // reconnect every 5s

    System.out.println(cause);
}
// reconnect to the broker
Runnable reconnectRunnable = new Runnable() {
    public void run() {
       if(reconnectStatus == 1) {
           System.out.println("Stop runnable!");
           executor.shutdown();
           return;
       } else {
           init();
       }
    }
};

当broker重新启动时,它在第一次工作时很好。但是,这个ConnectionLosped()触发器在第二次重新启动代理时不起作用。我该怎么修好它?
非常感谢。

共有1个答案

戴原
2023-03-14

如果使用此mqtt客户机,不需要额外的代码来自动重新连接

在创建MQTTClient时,可以在MQTTConnections中指定重新连接和清洁会话选项。

示例代码:

public void initClinet(){
    MqttClient client=new MqttClient("server address", MqttClient.generateClientId());
    client.setCallback(new MyListener());
    MqttConnectOptions options = new MqttConnectOptions();
    options.setAutomaticReconnect(true);
    options.setCleanSession(true);
    options.setUserName("username");
    options.setPassword("password".toCharArray());
    options.setKeepAliveInterval(10);
    options.setCleanSession(false);
    client.connect(options);
    client.subscribe("channelname");    
}
 类似资料:
  • 我是PHP领域的新手,在连接到MQTT时遇到了一些问题。 错误为:stream_socket_client():无法连接到TCP://...*:8083(连接超时) 在下面的代码中面临问题:

  • 我在artemis代理中添加了一个mqtt拦截器,以便拦截mqtt客户端连接: 我的客户端apache paho通过这个端口“WS://0.0.0.0:61614”连接到代理。 我的问题是只截获发布到主题的消息。 为什么不截获连接消息?

  • 问题内容: 在生产中,我有一个使用连接局部变量保存游戏状态的游戏。但是,我注意到,如果我在连接上闲置了一段时间,它将断开连接并重新连接,这将丢失当前状态。在本地主机上进行测试时,我从未注意到此行为。这是套接字连接的规范行为,还是导致连接断开的其他原因。 如果是正常行为,通常如何处理?是否应该将连接值全局存储,以便用户断开/重新连接时可以恢复连接值? 问题答案: 您的问题与套接字超时有关。如果某个套

  • 我如何用C#将消息发布到外部托管的MQTT代理(在我的例子中是VirtualBox--在openwrt之上)?

  • 重新建立mqtt连接,前提是必须已经通过Iot_id,Iot_pwd建立过一次mqtt连接。 请求方式: "|4|1|5|\r" 返回值: "|4|1|1|1|\r" mqtt连接状态:连接成功 "|4|1|1|2|reason|\r" mqtt连接状态:连接失败,字符串reason表示失败的原因 Arduino样例: softSerial.print("|4|1|5|\r");