Поведение метода setTimeToWait () в библиотеке Java Paho - PullRequest
0 голосов
/ 09 июня 2018

Я использую библиотеку paho для подключения к брокеру mqtt, отправки сообщений и почти все работает нормально, но у меня проблема с методом setTimeToWait ().он не определяет, сколько миллисекунд я положил в метод setTimeToWait (2000) или setTimeToWait (10).Я всегда получаю сообщения от Publiusher.

Почему я могу получать сообщения в течение нескольких часов?Если я установил время ожидания 2000 миллисекунд. Я думал, что через 2 секунды отсутствие сообщений от издателя, мой подписчик не может получать сообщения от издателя, и контроль будет возвращен.

Что я делаю не так?

Код издателя:

public class MqttPublishSample {

    public static void main(String[] args) throws MqttException {

        String messageString = "{\"device_status\": \"ready\"}";

        if (
                args.length == 2 ) {
            messageString = args[1];
        }


        System.out.println("== START PUBLISHER ==");
        MqttClient client = new MqttClient("tcp://localhost:1883" , MqttClient.generateClientId());
        client.connect();
        MqttMessage message = new MqttMessage();
        message.setPayload(messageString.getBytes());
        message.setQos(1);
        client.publish("/catalog", message);

        System.out.println("\tMessage '"+ messageString +"' to 'iot_data'");
        client.disconnect();

        System.out.println("== END PUBLISHER ==");

    }
}

Код абонента:

public class MqttSuscribeSample {

    public static void main(String[] args) {

        System.out.println("== START SUBSCRIBER ==");

        try{
            MqttClient client=new MqttClient("tcp://localhost:1883", MqttClient.generateClientId());
            client.setTimeToWait(2000);
            client.setCallback( new SimpleMqttCallback() );
            client.connect();
            client.subscribe( "/catalog");
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }

}

SimpleMqttCallback code

public class SimpleMqttCallback implements MqttCallback {

    public void connectionLost(Throwable throwable) {
        System.out.println("Connection to MQTT broker lost!");
    }

    public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
        System.out.println("Message received:\t"+ new String(mqttMessage.getPayload()) );

    }

    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
    }
}

1 Ответ

0 голосов
/ 09 июня 2018

Метод setTimeToWait() - это время, которое клиент должен ждать ответа от брокера при выполнении определенных действий, например

  • публикация сообщения
  • подписка
  • подключение или отключение от брокера

Это не время ожидания клиента или доставки сообщения для существующей подписки.

Если вы хотите этоТакое поведение вам нужно, чтобы запустить собственный таймер и либо отписаться от темы, либо отключиться от брокера, когда истечет время ожидания.

...