我有一些应用程序订阅了一些主题并发布了一些主题事件。调度程序定期检查连接。像这样:
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的实际连接状态?
1条答案
按热度按时间yqhsw0fo1#
据我所知,getconnectionstatus()方法获取某个“connection”变量的值,该变量在调用connect或disconnect方法时设置。它不验证连接。所以为了验证连接,我发布了一条关于某个主题的消息,如果连接丢失,我会收到一个异常。在catch block中,我断开连接以将值设置为正确的含义: