Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MQTT订阅物联网服务器上的连接丢失_Java_Mqtt_Ibm Cloud_Iot_Paho - Fatal编程技术网

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

Java MQTT订阅物联网服务器上的连接丢失,java,mqtt,ibm-cloud,iot,paho,Java,Mqtt,Ibm Cloud,Iot,Paho,我正在编写一个Java应用程序,使用EclipsePAHO库(org.Eclipse.Paho.client.mqtt3-1.0.2.jar)在设备和应用程序端发布/订阅物联网MQTT服务器 Connect在这两种凭据类型下都能很好地工作,并且发布似乎也是一样的。。。导致错误的是订阅: 通过mosquitto_子命令行尝试,它的循环如下: Client a:u5o0ux:tws sending CONNECT Client a:u5o0ux:tws received CONNACK Client

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

Connect在这两种凭据类型下都能很好地工作,并且发布似乎也是一样的。。。导致错误的是订阅:

通过mosquitto_子命令行尝试,它的循环如下:

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()方法返回:

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不能通过异步客户机释放持久化路径用户,使其在每次重试时都出现“持久化已在使用”异常,直到我停止JVM并手动清除该路径,但我认为这是某种库错误

不幸的是,我无法(或不知道如何)访问物联网端mqtt服务器来了解其中的情况


有什么想法吗?如果MOSQUITO__sub和您的Paho Java客户端在同一点(订阅)出现问题,则表示感谢,这意味着您的代理出现了问题

我试着运行这个:

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代理。或者您可以在本地运行自己的代理副本进行测试。

您的问题可能是由于无效的主题“matteo”

< >连接到Bluemix的IOT基金会,您将需要遵循IBM的物联网基础文档中所概述的主题格式:

谢谢!解决了我的问题。