awsiotmqttclient getconnectionstatus()不显示实际的连接状态

rjjhvcjd  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(308)

我有一些应用程序订阅了一些主题并发布了一些主题事件。调度程序定期检查连接。像这样:

AWSIotMqttClient client = new AWSIotMqttClient(
            mqttBrokerAddress,
            clientId,
            keyStore,
            keyPassword
    );  // it is a bean

计划程序获取连接状态,如果连接丢失,则尝试重新连接:

var status = client.getConnectionStatus();
log.debug("Connection status is " + status.name());
if (status != AWSIotConnectionStatus.CONNECTED)
client.connect();

当我中断连接时,我看到调度程序在连接丢失很长一段时间后记录连接状态connected,并且我的应用程序尝试发布消息。仅在20分钟后,我在日志和mqttexception和unknownhostexception中看到断开连接的状态。当我重新连接到网络时,我也在日志中看到断开连接的状态,我的客户端无法连接到aws。当我关闭并重新打开连接时,我认为这与我的互联网提供商有关。但当我停止应用程序和互联网连接,并再次启动它一起我的应用程序连接到aws后立即启动。如何接收与awsiotmqttclient的实际连接状态?

yqhsw0fo

yqhsw0fo1#

据我所知,getconnectionstatus()方法获取某个“connection”变量的值,该变量在调用connect或disconnect方法时设置。它不验证连接。所以为了验证连接,我发布了一条关于某个主题的消息,如果连接丢失,我会收到一个异常。在catch block中,我断开连接以将值设置为正确的含义:

try {
                awsIotMqttClient.publish("connection", AWSIotQos.QOS1, "Check connection", 60000);
            } catch (Exception e) {
                log.error("It seems connection lost. Disconnecting...");
                awsIotMqttClient.disconnect();
            }

相关问题