Spring Boot 是根据 Spring 结构的快捷开发的一套工具,能够极大地进步开发人员的开发功率。MQTT(Message Queuing Telemetry Transport)是根据发布订阅(Publish/Subscribe)模式的轻量级音讯传输协议,一般用于物联网设备间的通信。下面是如何在 Spring Boot 中对接 MQTT 的步骤:

导入额定的依靠:运用 Spring Boot 自带的 maven/Gradle 功能,在项目的 pom.xml 或 build.gradle 中增加 Eclipse Paho 的 MQTT 客户端库依靠。
配置 MQTT 衔接:在配置文件 application.properties 或 application.yml 中,增加 MQTT 服务器的衔接信息、用户名、暗码等参数。

3.编写 MQTT 客户端代码:通过运用 Spring Boot 自带的 @Component、@Service、@Controller 等注解定义 MQTT 客户端的事务代码,并在需要运用 MQTT 服务的地方(例如在某个 REST 接口中)直接调用。
4.在代码中参与 MQTT 的回调函数:MQTT 的客户端需要完结 MqttCallback 接口并重写接口中的三个办法,分别是衔接丢失的回调、音讯收到的回谐和音讯发布的回调。
下面是一些示例代码:
pom.xml 中增加如下依靠:

<groupId>org.eclipse.paho\</groupId>
<artifactId>org.eclipse.paho.client.mqttv3\</artifactId>
<version>1.2.5\</version>
</dependency>

application.properties 中增加如下参数:

mqtt.broker.url=tcp\://localhost:1883
mqtt.broker.username=user
mqtt.broker.password=password
mqtt.clientId=clientId
mqtt.topic=test

接下来就能够在代码中运用 MQTT 客户端了。下面是一些示例代码:

@Service
public class MqttService {
    @Value("${mqtt.broker.url}")
    private String brokerUrl;
    @Value("${mqtt.broker.username}")
    private String userName;
    @Value("${mqtt.broker.password}")
    private String password;
    @Value("${mqtt.clientId}")
    private String clientId;
    @Value("${mqtt.topic}")
    private String topic;
    private MqttClient mqttClient;
    @PostConstruct
    public void init() {
        try {
            mqttClient = new MqttClient(brokerUrl, clientId);
            MqttConnectOptions connectOptions = new MqttConnectOptions();
            connectOptions.setUserName(userName);
            connectOptions.setPassword(password.toCharArray());
            mqttClient.setCallback(new MqttCallback() {
                public void connectionLost(Throwable throwable) {
                  //衔接中断
                }
                public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
                    //收到音讯
                }
                public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
                    //发布完结
                }
            });
            mqttClient.connect(connectOptions);
            mqttClient.subscribe(topic);
        } catch (MqttException e) {
            //衔接失败
        }
    }
    public void publishMessage(String topic, String message) {
        MqttMessage mqttMessage = new MqttMessage(message.getBytes());
        mqttMessage.setQos(0);
        try {
            mqttClient.publish(topic, mqttMessage);
        } catch (MqttException e) {
        }
    }
}

上面的代码中,MqttService 类通过 @PostConstruct 注解,在启动时初始化 MQTT 客户端并衔接到 MQTT 服务器。然后,它重写了 MqttCallback 接口的三个办法,并在 messageArrived() 办法中履行自己的事务逻辑。一起,它还供给了 publishMessage() 办法,用于向 MQTT 服务器发布音讯。
运用Spring Boot衔接MQTT,主要是运用该结构自带的依靠和注解机制快速对接MQTT,并把MQTT的音讯接口暴露给应用程序开发者,使得开发者不需要关心MQTT的音讯传输细节即可处理MQTT音讯。
本文正在参与「金石计划」