MQTT上的连接丢失订阅了物联网服务器

时间:2015-05-28 09:57:13

标签: java mqtt ibm-cloud iot paho

我正在编写一个Java应用程序,使用Eclipse Paho Lib(org.eclipse.paho.client.mqtt3-1.0.2.jar)在设备和应用程序上发布/订阅物联网MQTT服务器侧。

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)
...

等等。

当从带有MqttAsyncClient的java尝试时,subcribe()方法返回,但是waitForCompletion()方法显然是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不会通过AsyncClient释放持久性路径用户,从而使得它已经使用了#34;持久性已经在使用"每次重试都会出现异常,直到我停止JVM并手动清除该路径,但我认为这是某种库错误。

不幸的是,我无法(或者不知道如何)访问IoT端mqtt服务器以了解其中发生的事情。

有什么想法吗?谢谢

2 个答案:

答案 0 :(得分:2)

看来你的问题很可能是由于主题无效" matteo"。

要在Bluemix中连接IoT Foundation,您需要遵循IBM Internet of Things Foundation文档中概述的主题格式: https://docs.internetofthings.ibmcloud.com/messaging/applications.html

答案 1 :(得分: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.orgiot.eclipse.org或其他公共MQTT代理之一。或者您可以在本地运行您自己的代理副本以进行测试。