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 . |