发布Paho MqttClient的方法永远阻止

时间:2016-11-29 13:05:26

标签: java timeout mqtt paho moquette

这适用于启动连接并发布第一条消息:

MemoryPersistence persistence = new MemoryPersistence();
client = new MqttClient("tcp://" + IrisProperties.MQTT_SERVER_ADDRESS,
    IrisProperties.MQTT_USERNAME,persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setConnectionTimeout(1);
connOpts.setUserName(IrisProperties.MQTT_USERNAME);
connOpts.setPassword(IrisProperties.MQTT_PASSWORD.toCharArray());
connOpts.setCleanSession(true);
client.connect(connOpts);

此连接每秒发布超过100条消息,但这行没有问题:

MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(qos);
client.publish(topic, message);

但过了一会儿(几分钟后)这个方法的第3行

sampleClient.publish(topic, message);

永远阻止线程,即使我将超时设置为1秒。

我使用Moquette作为带有websockets的MQTT Broker。

1 个答案:

答案 0 :(得分:3)

使用

  

client.setTimeToWait(timeToWaitInMillis);

默认情况下,此时间为-1,因此阻止当前线程直到操作完成。超时指定阻塞线程的最长时间。