MQTT (MQ Telemetry Transport) — это легкий протокол обмена сообщениями публикации / подписки. MQTT часто используется в приложениях Internet of Things, так как он был разработан для работы в удаленных местах с системой с небольшим пространством.
MQTT 3.1 является стандартом OASIS, и вы можете найти всю информацию на http://mqtt.org/
Эта статья проведет вас через различные шаги для запуска вашего первого приложения MQTT:
- Установите и запустите MQTT Broker
- Напишите приложение, которое публикует сообщения
- Напишите приложение, которое потребляет сообщения
Исходный код примера приложения доступен на GitHub .
Предпосылки
- Apache Maven 3.x
- Гит
Установите и запустите MQTT Broker
Вы можете найти много брокеров MQTT, для этого примера я буду использовать одного из самых распространенных брокеров Mosquitto .
Вы можете скачать и установить из бинарного пакета . Я использовал Homebrew для установки на мой Mac:
1
|
$ brew install mosquitto |
Запустите MQTT Broker с конфигурацией по умолчанию
1
|
$ /usr/local/sbin/mosquitto |
Публикация и использование сообщений
Откройте два окна терминала и выполните следующие команды:
потреблять
1
|
$ mosquitto_sub -h 127.0 . 0.1 -t iot_data |
Публиковать
1
|
$ mosquitto_pub -h 127.0 . 0.1 -t iot_data -m "Hello world" |
Вы должны увидеть сообщение Hello world
в окне потребителя / подписчика.
Напишите ваше первое приложение MQTT
Для этого примера я напишу небольшое Java-приложение, так как это язык, который я использую в своем глобальном проекте.
Maven Зависимости
Добавьте зависимость Eclipse Paho в ваш проект Maven
1
2
3
4
5
|
< dependency > < groupId >org.eclipse.paho</ groupId > < artifactId >org.eclipse.paho.client.mqttv3</ artifactId > < version >1.1.0</ version > </ dependency > |
Публикация сообщения
Опубликовать сообщение довольно просто, создайте MqttClient и используйте его для публикации по теме.
1
2
3
4
5
6
|
MqttClient client = new MqttClient( "tcp://localhost:1883" , MqttClient.generateClientId()); client.connect(); MqttMessage message = new MqttMessage(); message.setPayload( "Hello world from Java" .getBytes()); client.publish( "iot_data" , message); client.disconnect(); |
У вас есть много других опций, конфигураций, которые вы можете использовать при публикации сообщения, таких как безопасность, качество обслуживания (QoS) и т. Д .; но в этом посте я хочу просто показать, как легко публиковать и использовать сообщения MQTT.
Использование сообщений
Чтобы использовать сообщения, вам необходимо реализовать org.eclipse.paho.client.mqttv3.MqttCallback
который будет получать сообщение и использовать этот класс обратного вызова в MqttClient приложения Subscriber.
Класс обратного вызова:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
public class SimpleMqttCallBack implements MqttCallback { public void connectionLost(Throwable throwable) { System.out.println( "Connection to MQTT broker lost!" ); } public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { System.out.println( "Message received:\n\t" + new String(mqttMessage.getPayload()) ); } public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { // not used in this example } } |
Этот класс обратного вызова используется в приложении подписчика следующим образом:
1
2
3
|
MqttClient client= new MqttClient( "tcp://localhost:1883" , MqttClient.generateClientId()); client.setCallback( new SimpleMqttCallBack() ); client.connect(); |
Как и для издателя, я использую брокера и клиента без каких-либо опций (QoS, безопасность).
Создайте и запустите приложение
1- Получить образец кода
Клонировать проект от GitHub
1
|
$ git clone https: //github.com/tgrall/mqtt-sample-java.git |
2- Создайте проект с помощью Apache Maven:
Этот проект представляет собой простое Java-приложение, которое запускает издателя и подписчика с использованием библиотеки Eclipse Paho .
1
|
$ mvn clean package |
Для удобства проект примеров программ настроен так, что цель пакета maven создает единственный исполняемый файл /mqtt-sample
, который включает все примеры программ и зависимостей.
3- Запустить подписчик
Подписчик получит и распечатает все сообщения, опубликованные в теме iot_data
.
1
|
$ ./target/mqtt-sample subscriber |
4- Запустите издатель
Запустите издателя с помощью следующей команды, вторым параметром является сообщение для публикации
1
|
$ ./target/mqtt-sample publisher "My first MQTT message..." |
Вывод
В этой статье вы узнали, как:
- Установите и запустите MQTT Broker, Mosquitto
- Создать издателя и подписчика, разработанного на Java
Эта статья очень проста для быстрого запуска вашего первого приложения MQTT. Я написал эту статью как часть глобального проекта IoT, над которым я работаю, который будет собирать данные об устройствах, публиковать их в MapR Converged Data Platform с использованием потоков MQTT и MapR; Вот почему я использовал Java для приложения. Вы можете использовать любую клиентскую библиотеку MQTT для создания издателей и подписчиков.
Ссылка: | Начало работы с MQTT и Java от нашего партнера по JCG Tugdual Grall в блоге Tug’s Blog . |