Публиковать метод блокирования Paho MqttClient навсегда

Это хорошо работает, чтобы инициировать соединение и опубликовать первое сообщение:

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 в качестве MQTT-брокера с веб-сокетами.

1 ответ

Решение

Использование

client.setTimeToWait(timeToWaitInMillis);

По умолчанию это время равно -1, поэтому блокирует текущий поток до завершения действия. Тайм-аут указывает максимальное время, в течение которого он будет блокирован.

Другие вопросы по тегам