私はmqttメッセージを送受信するためにpahoを使用しています。これまでのところ、メッセージを送信しても問題ありません。mosquittoを使用して受信しています。
ここで、Javaクライアントを使用してメッセージを読みたいのですが、メッセージの受信に関するドキュメントが少ないことに気付きました。
MqttCallbackインターフェースを実装しましたが、サブスクライブしたトピックのメッセージの読み方を理解できませんでした。
これはこれまでの私のソースコードであり、mosquitto_subを使用してメッセージを読むことができます。
import org.Eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.Eclipse.paho.client.mqttv3.MqttCallback;
import org.Eclipse.paho.client.mqttv3.MqttClient;
import org.Eclipse.paho.client.mqttv3.MqttException;
import org.Eclipse.paho.client.mqttv3.MqttMessage;
public class PahoDemo implements MqttCallback {
MqttClient client;
MqttClient subClient;
public PahoDemo() {
}
public static void main(String[] args) {
new PahoDemo().doDemo();
}
public void doDemo() {
try {
client = new MqttClient("tcp://192.168.118.11:1883", "Sending");
subClient = new MqttClient("tcp://192.168.118.11:1883",
"Subscribing");
client.connect();
subClient.connect();
subClient.subscribe("foo");
MqttMessage message = new MqttMessage();
message.setPayload("A single message from my computer fff"
.getBytes());
client.publish("foo", message);
client.disconnect();
client.close();
subClient.disconnect();
subClient.close();
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void connectionLost(Throwable cause) {
// TODO Auto-generated method stub
}
@Override
public void messageArrived(String topic, MqttMessage message)
throws Exception {
System.out.println(message);
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
// TODO Auto-generated method stub
}
}
ブローカーがメッセージを送り返す時間がある前に、クライアントを閉じています。
また、クライアントのインスタンスを2つ必要とせず、1つだけで送受信できます。
私はあなたのコードを少し編集しましたが、あなたがそれを殺すまで実行し続け、メッセージを受け取ります。
_import org.Eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.Eclipse.paho.client.mqttv3.MqttCallback;
import org.Eclipse.paho.client.mqttv3.MqttClient;
import org.Eclipse.paho.client.mqttv3.MqttException;
import org.Eclipse.paho.client.mqttv3.MqttMessage;
public class PahoDemo implements MqttCallback {
MqttClient client;
public PahoDemo() {
}
public static void main(String[] args) {
new PahoDemo().doDemo();
}
public void doDemo() {
try {
client = new MqttClient("tcp://192.168.118.11:1883", "Sending");
client.connect();
client.setCallback(this);
client.subscribe("foo");
MqttMessage message = new MqttMessage();
message.setPayload("A single message from my computer fff"
.getBytes());
client.publish("foo", message);
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void connectionLost(Throwable cause) {
// TODO Auto-generated method stub
}
@Override
public void messageArrived(String topic, MqttMessage message)
throws Exception {
System.out.println(message);
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
// TODO Auto-generated method stub
}
}
_
編集:欠落しているclient.setCallback(this)
を追加しました