开发者社区> 问答> 正文

即使timeToWait设置为1000毫秒,同步Paho MQTTClient仍挂在发布上

我们有一个Spring Boot应用程序,可将IoT传感器数据发布到AWS IoT。在负载下,我们的阻塞MqttClient无限期阻塞:

"taskScheduler-72" - Thread t@313
    java.lang.Thread.State: WAITING
    at java.lang.Object.wait(Native Method)
    - waiting on <7e7ec8a6> (a java.lang.Object)
    at java.lang.Object.wait(Object.java:502)
    at org.eclipse.paho.client.mqttv3.internal.Token.waitForResponse(Token.java:143)
    at org.eclipse.paho.client.mqttv3.internal.Token.waitForCompletion(Token.java:108)
    at org.eclipse.paho.client.mqttv3.MqttToken.waitForCompletion(MqttToken.java:67)
    at org.eclipse.paho.client.mqttv3.MqttClient.publish(MqttClient.java:570)
    at org.eclipse.paho.client.mqttv3.MqttClient.publish(MqttClient.java:562)
    at 
    ...

我们正在使用QOS 1:

try {
        mqttClient.publish(topic, payload, 1, false);
    } catch (MqttException e) {
        throw new PublishingException(e);
    }

我们正在使用spring-integration-mqtt:

<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-mqtt</artifactId>
    <version>4.2.1.RELEASE</version>
  </dependency>

我尝试将paho客户端更新为最新版本:

<dependency>
  <groupId>org.eclipse.paho</groupId>
  <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
  <version>1.2.2</version>
  <scope>compile</scope>
</dependency>

并设置timeToWait,据我理解,如果发布请求在1000毫秒内未收到确认,则应该抛出MqttException:

mqttClient.setTimeToWait(1000);

为什么timeToWait不起作用?我们应该切换到AsyncMqttClient吗?

展开
收起
垚tutu 2019-12-12 09:21:40 2365 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载