Paho MqttClient 的 publish 方法永远阻塞
publish method of the Paho MqttClient blocking forever
这可以很好地启动连接并发布第一条消息:
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。
使用
client.setTimeToWait(timeToWaitInMillis);
默认情况下这个时间是 -1,所以这个阻塞当前线程直到操作有 completed.The 超时指定它将阻塞线程的最长时间。
这可以很好地启动连接并发布第一条消息:
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。
使用
client.setTimeToWait(timeToWaitInMillis);
默认情况下这个时间是 -1,所以这个阻塞当前线程直到操作有 completed.The 超时指定它将阻塞线程的最长时间。