Eclipse Paho, Library MQTT Client dari Eclipse Foundation
Eclipse Paho adalah umbrella project untuk beberapa implementasi klien MQTT dan MQTT-SN yang menggunakan berbagai bahasa pemrograman. Eclipse Paho adalah salah satu dari project open source untuk penerapan MQTT client yang tersedia dan secara aktif dipelihara oleh dukungan besar komunitas. Paho juga mempunyai implementasi, salah satunya, untuk bahasa pemrograman Java yang juga cocok jika digunakan untuk penerapan di lingkungan sistem embedded, seperti pada Android atau Single Board Computer layaknya Raspberry Pi.
Versi Java dari Eclipse Paho, dapat dibilang sudah stabil dan digunakan oleh banyak perusahaan di berbagai bidang industri untuk terhubung dengan MQTT broker. API synchronous/blocking dari Paho memudahkan programmer untuk mengimplementasikan logika aplikasi MQTT dengan cara yang bersih dan ringkas. sementara API asinkronus memungkinkan programmer melakukan kendali penuh terhadap aplikasi MQTT yang menuntut performa tinggi.
- MQTT Message Broker
Sebelum membuat program sederhana menggunakan Eclipse Paho, terlebih dahulu pastikan telah memiliki MQTT Message Broker yang telah berjalan pada komputer server (bisa juga menggunakan virtual machine). Pembaca bisa merujuk ke tulisan sebelumnya tentang bagaimana menginstal dan melakukan konfigurasi Eclipse Mosquitto
- Buat project Maven
Jika pembaca belum memahami apa itu Maven, dan bagaimana membuat project Java dengan Maven, silahkan membaca tulisan sebelumnya tentang Maven, dan bagaimana menginstal dan membuat project baru tentang Maven
Ketik perintah berikut untuk membuat project baru lalu import project tersebut ke dalam Eclipse IDE
[simterm]$ mvn archetype:generate -DgroupId=com.embeddednesia.java -DartifactId=java-mqtt-client -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
[/simterm]- Ubah pom.xml
Hal pertama yang perlu diubah adalah, metambahkan tag <properties>
pada pom.xml sehingga project menggunakan JRE System Library -nya, berikutnya menambahkan dependensi Eclipse Paho sehingga maven dapat mengunduh library Eclipse Paho dari Maven Repository. Hasil akhir dari pom.xml yang telah diubah adalah menjadi sebagai berikut
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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/maven-v4_0_0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<groupId>com.embeddednesia.java</groupId> | |
<artifactId>java-mqtt-client</artifactId> | |
<packaging>jar</packaging> | |
<version>1.0-SNAPSHOT</version> | |
<name>java-mqtt-client</name> | |
<url>http://maven.apache.org</url> | |
<properties> | |
<!– https://maven.apache.org/general.html#encoding-warning –> | |
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |
<maven.compiler.source>1.8</maven.compiler.source> | |
<maven.compiler.target>1.8</maven.compiler.target> | |
</properties> | |
<dependencies> | |
<dependency> | |
<groupId>org.eclipse.paho</groupId> | |
<artifactId>org.eclipse.paho.client.mqttv3</artifactId> | |
<version>1.2.0</version> | |
</dependency> | |
<dependency> | |
<groupId>junit</groupId> | |
<artifactId>junit</artifactId> | |
<version>3.8.1</version> | |
<scope>test</scope> | |
</dependency> | |
</dependencies> | |
</project> |
- Buat Program Publisher
Ubah code pada App.java menjadi sebagai berikut, code berikut akan mempublish nilai 200Bq pada topic yang bernama sensor/slvr01/radiation
. Jalankan program lalu perhatikan pada mqtt client yang telah men-subscribe topic tesebut
package com.embeddednesia.java;
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.persist.MemoryPersistence;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
try {
MqttClient client = new MqttClient("tcp://192.168.8.102:1883",
MqttClient.generateClientId(),
new MemoryPersistence());
MqttConnectOptions options = new MqttConnectOptions();
options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);
client.connect(options);
client.publish("sensor/slvr01/radiation", "200 Bq".getBytes(),2, false);
} catch (MqttException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Perhatikan pada baris 18-20 dimana MqttClient perlu diconstruct terlebih dahulu dengan alamat IP dari Mqtt Broker berada, pada contoh ini alamatnya adalah tcp://192.168.8.102:1883
, sesuaikan dengan mesin yang pembaca gunakan.
Setelah MqttClient berhasil di-instansi, lalu koneksikan dengan Mqtt Broker dengan seperti pada baris 23, sebelumnya jangan lupa untuk mengatur option, seperti halnya versi MQTT yang sedang digunakan.
Untuk melakukan publish sebuah topic gunakan baris 24 dimana sensor/slvr01/radiation
adalah nama topic yang di-publish, sedangkan 200 Bq
adalah payload yang dikirim. Nilai 2 adalah QoS yang artinya Quality of Service, yang secara singkat didefinisikan sebagai sebuah persetujuan antara pengirim pesan dan penerima pesan yang menentukan jaminan terhadap pengiriman sebuah pesan tertentu,
Ada 3 level dari QoS di dalam MQTT
- At most once (0)
- At least once (1)
- Exactly once (2).