Статьи

Начало работы с MQTT и Java

MQTT (MQ Telemetry Transport) — это легкий протокол обмена сообщениями публикации / подписки. MQTT часто используется в приложениях Internet of Things, так как он был разработан для работы в удаленных местах с системой с небольшим пространством.

MQTT 3.1 является стандартом OASIS, и вы можете найти всю информацию на http://mqtt.org/

Эта статья проведет вас через различные шаги для запуска вашего первого приложения MQTT:

  1. Установите и запустите MQTT Broker
  2. Напишите приложение, которое публикует сообщения
  3. Напишите приложение, которое потребляет сообщения

Исходный код примера приложения доступен на 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 .