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

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

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

  1. AWSIotMqttClient client = new AWSIotMqttClient(
  2. mqttBrokerAddress,
  3. clientId,
  4. keyStore,
  5. keyPassword
  6. ); // it is a bean

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

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

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

yqhsw0fo

yqhsw0fo1#

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

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

相关问题