3

デバイス側とアプリケーション側の両方で、Eclipse Paho Lib (org.eclipse.paho.client.mqtt3-1.0.2.jar) を使用して Internet of Things MQTT サーバーに公開/サブスクライブする Java アプリケーションを作成しています。

接続は両方の資格情報タイプでうまく機能し、同じように公開されているようです...エラーが発生するのは購読です:

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

また、このエラーにより、lib は AsyncClient によって永続パス ユーザーを解放せず、JVM を停止してそのパスを手動でクリアするまで、再試行のたびに「Persistence Already in Use」例外が発生しますが、これはライブラリのバグのようなものです。

残念ながら、IoT 側の mqtt サーバーにアクセスして、そこで何が起こっているのかを理解することはできません (または方法がわかりません)。

何か案は?ありがとうございました

4

2 に答える 2

2

あなたの問題は、無効なトピック「matteo」が原因である可能性があります。

Bluemix で IoT Foundation に接続するには、IBM Internet of Things Foundation の資料 ( https://docs.internetofthings.ibmcloud.com/messaging/applications.html ) で概説されているトピック形式に従う必要があります 。

于 2015-06-02T12:39:58.283 に答える