这可以很好地启动连接并发布第一条消息:

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);


但过一会(几分钟后)此方法的第三行

sampleClient.publish(topic, message);


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

我将Moquette与websockets一起用作MQTT Broker。

最佳答案

使用


  client.setTimeToWait(timeToWaitInMillis);


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

关于java - Paho MqttClient的永远发布方法阻塞,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40866658/

10-11 14:35