sangoの使い方 - Java 編¶
Java からsangoを使う方法について説明します。
以下の手順で行います。
Java ライブラリを取得
クライアントを実装
確認した環境
Java 1.8 SE
mqtt-client 0.4.0
1. Java ライブラリを取得¶
Pahoのリリースディレクトリ から mqtt-client-0.4.0.jarをダウンロードします。
あるいは、pom.xmlを以下のように記載します。
<project>
<repositories>
<repository>
<id>Eclipse Paho Repo</id>
<url>https://repo.eclipse.org/content/repositories/paho-releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>mqtt-client</artifactId>
<version>0.4.0</version>
</dependency>
</dependencies>
</project>
2. クライアントの実装¶
Connect¶
Connect部分はPub/Subともに共通です。
Javaでは、メッセージ到着などをMqttCallbackインタフェースを実装したクラ
スを setCallback
で指定します。今回は、MQTTクラスでMqttCallbackも実
装しましたが、別のクラスで実装することも可能です。
MqttCallbackインタフェースには以下の3つのメソッドを実装する必要があ ります。
connectionLost
deliveryComplete
messageArrived
また、他の言語ではClientIdをランダムに設定してくれるものもありますが、 Java言語ライブラリではClientIdを明示的に指定する必要があります。今回の サンプルでは固定値としましたが、実際にはランダムな文字列を設定させて方 が良いかと思います。
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.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttPersistenceException;
public class MQTT implements MqttCallback{
// MQTT Clientをクラスに持たせています
MqttClient client;
public void Connect(String hostname, int port, String userName, String password) throws MqttException{
// 接続先をURIとして設定します
String brokerURI = "tcp://" + hostname + ":" + port;
// クライアントIDを設定します。
String clientId = "test-client";
// MQTT Clientのインスタンスを作成します。
client = new MqttClient(brokerURI, clientId);
// 接続設定をします
MqttConnectOptions opts = new MqttConnectOptions();
opts.setUserName(userName);
opts.setPassword(password.toCharArray());
// MqttCallbackを設定します。今回はこのクラス自身が実装しています
client.setCallback(this);
// Connectします
client.connect(opts);
}
Subscribe¶
subscribe
を呼びます。
// メッセージが到着するとこのCallbackメソッドが呼ばれます
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println(message);
}
public void Subscribe(String topic, int qos) throws MqttException{
client.subscribe(topic, qos);
}
Connectの箇所でsetCallbackにてMqttCallbackを指定していますので、
Subscribeしたtopicにメッセージが到着すると、 messageArrived
メソッ
ドが呼び出されます。
Publish¶
publish
を呼び出します。
public void Publish(String topic, String payload, int qos) throws MqttPersistenceException, MqttException{
MqttMessage message = new MqttMessage(payload.getBytes());
message.setQos(qos);
client.publish(topic, message);
}
Comments
comments powered by Disqus