(mqtt java客戶端的使用參看這篇文章)
Spring Integration基于Eclipse Paho MQTT客戶端庫提供了支持MQTT協(xié)議的入站和出站通道適配器妆兑。但是使用起來不是很靈活(有可能是沒有深入理解??)。在參考了這篇文章后有了如下實(shí)現(xiàn):
1. maven依賴
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.0</version>
</dependency>
2. 配置文件
- applicationContext.xml
類型 | 描述 |
---|---|
DefaultMqttPahoClientFactory | 客戶端工廠類,根據(jù)配置的選項(xiàng)(用戶名券躁、密碼、服務(wù)器集群地址等)創(chuàng)建一個(gè)默認(rèn)的客戶端识窿。 |
MqttPahoMessageHandler | MQTT出站通道適配器的抽象類的實(shí)現(xiàn),用于推送消息。 |
<bean id="clientFactory"
class="org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory">
<property name="userName" value="${mqtt.username}"/>
<property name="password" value="${mqtt.password}"/>
<property name="cleanSession" value="${mqtt.cleanSession}"/>
<property name="keepAliveInterval" value="${mqtt.keepAliveInterval}"/>
<property name="serverURIs">
<array>
<value>${mqtt.serverURI1}</value>
</array>
</property>
</bean>
<bean id="mqttHandler" class="org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler">
<constructor-arg name="clientId" value="${mqtt.clientId}"/>
<constructor-arg name="clientFactory" ref="clientFactory"/>
<property name="async" value="${mqtt.async}"/>
<property name="defaultQos" value="${mqtt.defaultQos}"/>
<property name="completionTimeout" value="${mqtt.completionTimeout}"/>
</bean>
- config.properties
#用戶名
mqtt.username=mqttPubClient
#密碼
mqtt.password=123456
#是否清除會(huì)話
mqtt.cleanSession=false
#服務(wù)端url
mqtt.serverURI1=tcp://localhost:1883
#是否異步發(fā)送
mqtt.async=true
#超時(shí)時(shí)間
mqtt.completionTimeout=20000
#心跳
mqtt.keepAliveInterval=30
#客戶端id
mqtt.clientId=mqttPubClient
#默認(rèn)的消息服務(wù)質(zhì)量
mqtt.defaultQos=1
3. 調(diào)用
@Resource
private MqttPahoMessageHandler mqttHandler;
@Override
public void send(String topic, String content) {
// 構(gòu)建消息
Message<String> messages = MessageBuilder.withPayload(content).setHeader(MqttHeaders.TOPIC, topic).build();
// 發(fā)送消息
mqttHandler.handleMessage(messages);
}
示例代碼:https://github.com/brandonbai/mqtt-spring-boot/tree/master/samples/mqtt-spring-sample
鏈接
- 項(xiàng)目網(wǎng)站:https://www.eclipse.org/paho
- Eclipse項(xiàng)目信息:https://projects.eclipse.org/projects/iot.paho
- GitHub:https://github.com/eclipse/paho.mqtt.java
- MQTT Java客戶端的使用:http://www.reibang.com/p/65e1748a930c
- MQTT服務(wù)端Mosquitto搭建:http://www.reibang.com/p/9e3cb7042a2e