2015-05-28 8 views
3

Я пишу приложение Java для публикации/подписания в Интернете сервера Things MQTT с использованием Eclipse Paho Lib (org.eclipse.paho.client.mqtt3-1.0.2. jar), как на стороне устройства, так и на стороне приложения.Соединение потеряно на MQTT подписаться на Интернет Things Server

Connect хорошо работает с обоими типами учетных данных, а так же, как представляется, публиковать ... Что дает мне ошибку является подписываться:

Попытка его mosquitto_sub командной строки, это петли, как это:

Client a:u5o0ux:tws sending CONNECT 
Client a:u5o0ux:tws received CONNACK 
Client a:u5o0ux:tws sending SUBSCRIBE (Mid: 1, Topic: matteo, QoS: 0) 
Client a:u5o0ux:tws sending CONNECT 
Client a:u5o0ux:tws received CONNACK 
Client a:u5o0ux:tws sending SUBSCRIBE (Mid: 2, Topic: matteo, QoS: 0) 
Client a:u5o0ux:tws sending CONNECT 
Client a:u5o0ux:tws received CONNACK 
Client a:u5o0ux:tws sending SUBSCRIBE (Mid: 3, Topic: matteo, QoS: 0) 
Client a:u5o0ux:tws sending CONNECT 
Client a:u5o0ux:tws received CONNACK 
Client a:u5o0ux:tws sending SUBSCRIBE (Mid: 4, Topic: matteo, QoS: 0) 
... 

И так далее.

При попытке из Java с MqttAsyncClient, в subcribe() возвращает метод, но затем метод waitForCompletion() istantly trows:

Connection lost (32109) - java.io.EOFException 

Это код, который я бегу:

String tmpDir = System.getProperty("java.io.tmpdir"); 
MqttDefaultFilePersistence dataStore = new MqttDefaultFilePersistence(tmpDir); 

... 

// Construct a non blocking MQTT client instance 
client = new MqttAsyncClient(getMQTTBrokerURL(), clientId, dataStore); 

// Set this wrapper as the callback handler 
client.setCallback(this); 

, а затем:

connect(); 

... 

IMqttToken subToken = client.subscribe(topic, qos, null, null); 
subToken.waitForCompletion(); 

Кроме того, эта ошибка делает LIB не relese персистенции р пользователь AsyncClient, заставляя его вызывать исключение «Persistence Already in Use» при каждой попытке, пока я не остановлю JVM и не очистит этот путь вручную, но я полагаю, что это будет своего рода ошибка библиотеки.

К сожалению, я не могу (или не знаю, как) обращаться к серверу mqtt на стороне IoT, чтобы понять, что там происходит.

Любые идеи? Спасибо

ответ

0

Если у mosquitto_sub и вашего клиента Paho Java возникают проблемы в одной точке (SUBSCRIBE), это подразумевает проблему с вашим брокером.

Я попытался запустить это:

mosquitto_sub -t matteo -i 'a:u5o0ux:tws' -d -h test.mosquitto.org 

И получил результат:

Client a:u5o0ux:tws sending CONNECT 
Client a:u5o0ux:tws received CONNACK 
Client a:u5o0ux:tws sending SUBSCRIBE (Mid: 1, Topic: matteo, QoS: 0) 
Client a:u5o0ux:tws received SUBACK 
Subscribed (mid: 1): 0 

Может быть, вы могли бы попробовать подключения клиента к test.mosquitto.org, iot.eclipse.org или одного из других государственных MQTT брокеров там. Или вы можете запустить свою собственную копию брокера локально для тестирования.

2

Похоже, что ваша проблема связана с неверной темой «matteo».

Для подключения к IoT Foundation в Bluemix, вам нужно будет следовать формату тему, как указано в IBM Интернет вещей фонда документации здесь: https://docs.internetofthings.ibmcloud.com/messaging/applications.html

+0

Спасибо! Решила мою проблему. –