MQTTで遊ぶ(Java)

すっかりブログ書くのを放置してしまいましたが、前回MQTTサーバを導入しましたので、実際にコード書いてみます。
お仕事でプログラム書かなくなって久しいですが一番書ける言語はやっぱりJavaなので、Javaで。

・・・といっても、ここに書いてあることを試すだけですが^^; eclipse.org

設定

pom.xmlファイルを用意し次のように記入し、Java用MQTTクライアントを入手します。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

(中略)
    <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>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.1.0</version>
        </dependency>
    </dependencies>
</project>

これで、org.eclipse.paho.client.mqttv3-1.1.0.jarファイルが落ちてきました。

コード

次にコードを書きます。 コードの内容は、MQTTサーバに接続し、"test"のトピックに"Message from MqttPublishSample"というメッセージを投げるというものです。

※package文は省略

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.persist.MemoryPersistence;

public class Sample {
    
        public static void main(String[] args) {
 
        String topic = "test";
        String content = "Message from MqttPublishSample";
        int qos = 0;
        String broker = "tcp://***.***.***.***:1883";
        String clientId = "JavaSample";
        MemoryPersistence persistence = new MemoryPersistence();
  
        try {
            MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setCleanSession(true);
            System.out.println("Connecting to broker: " + broker);
            sampleClient.connect(connOpts);
            System.out.println("Connected");
            System.out.println("Publishing message: " + content);
            MqttMessage message = new MqttMessage(content.getBytes());
            message.setQos(qos);
            sampleClient.publish(topic, message);
            System.out.println("Message published");
            sampleClient.disconnect();
            System.out.println("Disconnected");
            System.exit(0);
        } catch (MqttException me) {
            me.printStackTrace();
        }
    }
}

確認

MQTTサーバを立ち上げます。

sudo vernemq start

前回も使用したPaho Clientでサーバにつなぎ、"test"トピックをSubscribeしておきます。
f:id:xyzplus:20170211184347j:plain

そして、先ほど書いたJavaプログラムを実行。

  • プログラムのコンソール
    f:id:xyzplus:20170211184725j:plain

  • Paho Clientの画面
    f:id:xyzplus:20170211184529j:plain

最下行のReceivedにある通り、testトピックのJavaプログラムから発行したメッセージをPaho Clientで受信することが出来ました。