java - AWSIotMqttClient getConnectionStatus() 不显示实际连接状态
问题描述
我有一个订阅了一些主题并在该主题上发布一些事件的应用程序。调度程序定期检查连接。像这样的东西:
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
在连接丢失很长时间后记录连接状态,并且我的应用程序尝试发布消息。DISCONNECTED
仅在 20 分钟后,我在日志和 中MqttException
看到了状态UnknownHostException
。
当我重新连接到网络时,我还会DISCONNECTED
在日志中看到状态,并且我的客户端无法连接到 AWS。当我关闭并重新打开连接时,我认为这与我的互联网提供商有关。但是当我停止应用程序和互联网连接并再次一起启动时,我的应用程序在立即启动后连接到 AWS。
如何获得实际的连接状态AWSIotMqttClient
?
解决方案
据我了解,该方法在调用or方法时getConnectionStatus()
获取某个connection
变量集的值。它不验证连接。因此,为了验证连接,我发布了关于某个主题的消息,如果连接丢失,我会收到异常。在 catch 块中,我断开连接以设置正确的值:connect
disconnect
try {
awsIotMqttClient.publish("connection", AWSIotQos.QOS1, "Check connection", 60000);
} catch (Exception e) {
log.error("It seems connection lost. Disconnecting...");
awsIotMqttClient.disconnect();
}
推荐阅读
- javascript - 使用 Javascript 将 href 更改为 django 迭代对象
- python - 尝试在多标签分类问题中应用自定义损失时出现 TypeError
- r - ARIMA 模型:手动与内置差分
- php - 我应该使用 strip_tags() 还是 htmlspecialchars() 在此处回显用户提交的链接?
- r - 替换 R 中的逻辑运算符
- python - Python Selenium 检查 Word 但不在源代码中
- javascript - 选择解构数组中的元素时防止错误
- laravel - 如何在 laravel 中不显示 api 错误?
- mysql - MySQL IF NOT EXISTS ... THEN 语句
- angular - RxJS - 完成不触发