我正在使用Paho的MQTT Java库来检测一些设备的状态。我面临着一个奇怪的问题,因为每隔5分钟我就会收到一个连接丢失的错误。顺便说一句,使用reconnect方法它工作得很好,但是为什么我会得到这个奇怪的事实呢?我正在使用@Singleton组件中的Java EE中的这些代码行,它在 Boot 时启动。
String id = MqttAsyncClient.generateClientId();
System.out.println("Mqtt " + id + " " + uuid + " " + topics);
MqttClient client = new MqttClient(mqttSettings.generateURI(), id, new MemoryPersistence());
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setAutomaticReconnect(true);
connOpts.setUserName(mqttSettings.getUsername());
connOpts.setPassword(mqttSettings.getPassword().toCharArray());
if (statement) {
setStatement(uuid, connOpts);
}
client.setCallback(callback);
client.connect(connOpts);
System.out.println("Connected? "+client.isConnected());
client.subscribe(topics);
if (statement) {
try {
System.out.println("Publishing installation status online...");
publishOnline(client);
} catch (MqttException e) {
System.out.println("MQTT local");
e.printStackTrace();
}
}
return client;
1条答案
按热度按时间mrzz3bfm1#
希望我们能为这次讨论提供一些线索。
有几点我们需要考虑。
什么是setAutoReconnect(true)MQTT连接的KeepAlive时间是多少
参见eclipse.org
公共void集自动重新连接(布尔值自动重新连接)
设置客户端是否在连接丢失时自动尝试重新连接到服务器。如果设置为false,则客户端在连接丢失时不会尝试自动重新连接到服务器。如果设置为true,则在连接丢失时,客户端将尝试重新连接到服务器。在尝试重新连接之前,客户端最初将等待1秒钟。对于每一次失败的重新连接尝试,延迟将加倍,直到达到2分钟,此时延迟将保持在2分钟。
在OASIS的MQTT v3.1.1文档中,Keepalive值用作一个指针,让客户端检查连接。如果连接无效,客户端可以根据自动重新连接方法决定是否重新连接。
默认情况下,如果未提供Keepalive值,则将考虑默认值60秒。
保活行为如下所示。
如果保持活动值不为零,并且服务器在保持活动时间段的1.5倍内未从客户端接收到控制数据包,则必须断开与客户端的网络连接,就像网络发生故障一样[MQTT-3.1.2-24]。
因此,在您的情况下,可能有一个连接中断发生从客户端或从服务器端由于tcp连接超时。
希望我能够提供一些信息,帮助您了解此过程