Как установить время ожидания для клиента MQTT? - PullRequest
2 голосов
/ 08 марта 2011

Я использую Java-реализацию IA92 для MQTT , которая позволяет мне подключаться к брокеру MQTT.Чтобы установить соединение, я делаю что-то вроде этого:

// Create connection spec
String mqttConnSpec = "tcp://the_server@the_port";
// Create the client and connect
mqttClient = MqttClient.createMqttClient(mqttConnSpec, null);
mqttClient.connect("the_id", true, 666);

Проблема в том, что иногда серверу требуется слишком много времени для отправки ответа, и он выдает исключение тайм-аута:

org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocket(OSNetworkSystem.java:130)
  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:246)
  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:533)
  at java.net.Socket.connect(Socket.java:1055)
  at com.ibm.mqtt.j2se.MqttJava14NetSocket.<init>((null):-1)
  at com.ibm.mqtt.j2se.MqttJavaNetSocket.setConnection((null):-1)
  at com.ibm.mqtt.Mqtt.tcpipConnect((null):-1)
  at com.ibm.mqtt.MqttBaseClient.doConnect((null):-1)
  at com.ibm.mqtt.MqttBaseClient.connect((null):-1)
  at com.ibm.mqtt.MqttClient.connect((null):-1)
  at com.ibm.mqtt.MqttClient.connect((null):-1)

Что мне нужно сделать, это установить тайм-аут вручную, вместо того, чтобы позволить клиенту mqtt решить это.Документация гласит: Существуют также методы для настройки атрибутов транспортного соединения MQ Telemetry, таких как тайм-ауты и повторные попытки.

Но, честно говоря, я ничего не нашел об этом.Я взглянул на всю ссылку на Javadoc, и нет никаких доказательств конфигурации тайм-аута.Я не вижу исходный код, поскольку он не является открытым исходным кодом.

Итак, как я могу установить время ожидания для соединения Mqtt?

Ответы [ 3 ]

2 голосов
/ 05 февраля 2016

Если у вас есть путаница, вы можете перейти к MqttConnectionOptions для подробной информации.

    String userName="Ohelig";
    String password="Pojke";
    MqttClient client = new MqttClient("tcp://192.168.1.4:1883","Sending");      
    MqttConnectOptions authen = new MqttConnectOptions();
    authen.setUserName(userName);
    authen.setPassword(password.toCharArray());
    authen.setKeepAliveInterval(30);
    authen.setConnectionTimeout(300);

    client.connect(authen);
0 голосов
/ 31 августа 2012

Какой брокер вы используете?Действительно Малый Message Broker V1.1 Alpha, Mosquitto, брокер, который поставляется с IBM WebSphere?Вам необходимо установить это значение тайм-аута в конфигурации вашего сервера.Потому что система работает таким образом.Вы устанавливаете значение поддержания активности в своем брокере и отправляете эхо-запрос от клиента до истечения этого интервала, чтобы брокер не закрыл соединение клиент-сервер и процесс перезапустился.На самом деле, даже если этот интервал истекает, сервер все равно не закроет соединение, пока не закончится «льготный период».Смотри http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#connect

0 голосов
/ 09 марта 2011

Я ничего не знаю о ia92, но я полагаю, что 666 в вызове connect () - это то, что вы пытаетесь установить тайм-аут?

Тайм-аут, на который ссылается документацияВероятно, это тайм-аут keepalive.Это максимальное количество секунд (выбираемое клиентом), которое может пройти без связи между сервером и клиентом.Я думаю, это то, что вас больше всего интересует.

С другой стороны, повторные попытки, скорее всего, относятся к повторным попыткам сообщений, которые, похоже, сбились с пути при отправке сообщений с QoS> 0.Хотя это будет обрабатываться кодом клиентской библиотеки, а не брокером.Это то, что вступает в игру только после того, как вы подключились, поэтому я очень сомневаюсь, что это ваша проблема.

Чтобы быть уверенным, что тайм-аут keepalive установлен правильно, я бы попробовал указать вашему клиенту намодифицированный брокер mosquitto .Вы можете изменить mqtt3_handle_connect () в src / read_handle_server.c, чтобы вывести значение keepalive при подключении.Это гарантирует, что он делает то, что вы думаете, но не поможет с реальной проблемой, я боюсь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...