gpt4 book ai didi

java - MQTT 连接丢失订阅物联网服务器

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:30 29 4
gpt4 key购买 nike

我正在编写一个 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() 方法立即返回:

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();

此外,此错误使库无法通过 AsyncClient 释放持久性路径用户,使其在每次重试时抛出“持久性已在使用”异常,直到我停止 JVM 并手动清除该路径,但我假设这是某种库错误。

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

有什么想法吗?谢谢

最佳答案

看来您的问题可能是由于主题“matteo”无效所致。

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

关于java - MQTT 连接丢失订阅物联网服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30503207/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com