【发布时间】:2021-03-29 02:55:46
【问题描述】:
我在 CONNECTED/DISCONNECTED 主题上使用 IoT 规则(来自 here)。所以我想在设备连接或断开连接时收到电子邮件。在我的设备上,我在启动时运行下一个代码(仅在启动时):
iotClient = new AWSIotMqttClient(Configuration.IOT_CLIENT_ENDPOINT,
deviceId,
keyStore,
keystorePass);
iotClient.setKeepAliveInterval(1200000); //20 minutes (maximum)
iotClient.connect();
但是我的行为很奇怪。我有 3 台设备,在每台设备上我都得到了这个堆栈跟踪,但由于不同的原因:
[pool-8-thread-1] com.amazonaws.services.iot.client.core.AwsIotConnection.onConnectionSuccess Connection successfully established
[pool-8-thread-1] com.amazonaws.services.iot.client.core.AbstractAwsIotClient.onConnectionSuccess Client connection active: <client ID>
[pool-8-thread-1] com.amazonaws.services.iot.client.core.AwsIotConnection.onConnectionFailure Connection temporarily lost
[pool-8-thread-1] com.amazonaws.services.iot.client.core.AbstractAwsIotClient.onConnectionFailure Client connection lost: <client ID>
[pool-8-thread-1] com.amazonaws.services.iot.client.core.AwsIotConnection$1.run Connection is being retried
[pool-8-thread-1] com.amazonaws.services.iot.client.core.AwsIotConnection.onConnectionSuccess Connection successfully established
[pool-8-thread-1] com.amazonaws.services.iot.client.core.AbstractAwsIotClient.onConnectionSuccess Client connection active: <client ID>
有时由于 DUPLICATE_CLIENTID 断开原因,或者有时由于 MQTT_KEEP_ALIVE_TIMEOUT 断开原因(MQTT_KEEP_ALIVE_TIMEOUT 每 30-35 分钟发生一次,DUPLICATE_CLIENTID 每 10 分钟发生一次),我会收到此堆栈跟踪
所以,我不明白如果每个客户端都有唯一的 ID,我为什么需要处理 DUPLICATE_CLIENTID,如果 没有间歇性连接问题,我需要处理 MQTT_KEEP_ALIVE_TIMEOUT strong>(我每分钟都会将日志发送到我的服务器,所以这不是 WIFI/互联网问题)。我从这里使用最新的 AWS IoT SDK - https://github.com/aws/aws-iot-device-sdk-java。
我该如何解决这些问题?
我的棘手解决方案:
我添加了一个预定线程,该线程将空消息发送到主题 - ${iot:Connection.Thing.ThingName}/ping 每 20 分钟:
scheduledExecutor.scheduleAtFixedRate(() -> {
try {
iotClient.publish(String.format(Configuration.PING_TOPIC, deviceId), AWSIotQos.QOS0, "");
} catch (AWSIotException e) {
LOGGER.error("Failed to send ping", e);
}
}, Configuration.PING_INITIAL_DELAY_IN_MINUTES, Configuration.PING_PERIOD_IN_MINUTES, TimeUnit.MINUTES);
所以这个解决方案解决了不活跃的问题,但我仍然想找到一个更优雅的解决方案......
【问题讨论】:
标签: java amazon-web-services iot aws-iot disconnect