このエントリーをはてなブックマークに追加

sangoの使い方 - Java 編

Java からsangoを使う方法について説明します。

以下の手順で行います。

  1. Java ライブラリを取得
  2. クライアントを実装

確認した環境

  • 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);
}