SpringBoot2.0集成MQTT消息推送功能實(shí)現(xiàn)
這幾天在弄后端管理系統(tǒng)向指定的Android客戶端推送消息的功能模塊,查閱了網(wǎng)上很多博客介紹的許多方式,最終選擇基于MQTT協(xié)議來實(shí)現(xiàn),MQTT是一個(gè)輕量級的消息發(fā)布/訂閱協(xié)議,它是實(shí)現(xiàn)基于手機(jī)客戶端的消息推送服務(wù)器的理想解決方案。
實(shí)現(xiàn)MQTT協(xié)議的中間件有很多,我用的是Apollo服務(wù)器,如何搭建MQTT服務(wù)器,請查閱其他資料。這里,主要介紹SpringBoot2.0集成MQTT實(shí)現(xiàn)消息推送的功能。好,正式開始:
本文采用Gateway綁定的方式,網(wǎng)上也有介紹但不全面,還有其他采用Paho MQTT Client庫的方式實(shí)現(xiàn)的。
第一,pom配置,我們需要引入相關(guān)jar:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>
第二,配置MQTT服務(wù)器基本信息,在springBoot配置文件application.properties中配置,添加如下:
#MQTT配置信息 #MQTT-用戶名 spring.mqtt.username=admin #MQTT-密碼 spring.mqtt.password=password #MQTT-服務(wù)器連接地址,如果有多個(gè),用逗號隔開,如:tcp://127.0.0.1:61613,tcp://192.168.2.133:61613 spring.mqtt.url=tcp://127.0.0.1:61613 #MQTT-連接服務(wù)器默認(rèn)客戶端ID spring.mqtt.client.id=mqttId #MQTT-默認(rèn)的消息推送主題,實(shí)際可在調(diào)用接口時(shí)指定 spring.mqtt.default.topic=topic
第三,配置MQTT消息推送配置類,
/**
* 〈一句話功能簡述〉<br>
* 〈MQTT發(fā)送消息配置〉
*
* @author AnswerChang
* @create 2018/6/4
* @since 1.0.0
*/
@Configuration
@IntegrationComponentScan
public class MqttSenderConfig {
@Value("${spring.mqtt.username}")
private String username;
@Value("${spring.mqtt.password}")
private String password;
@Value("${spring.mqtt.url}")
private String hostUrl;
@Value("${spring.mqtt.client.id}")
private String clientId;
@Value("${spring.mqtt.default.topic}")
private String defaultTopic;
@Bean
public MqttConnectOptions getMqttConnectOptions(){
MqttConnectOptions mqttConnectOptions=new MqttConnectOptions();
mqttConnectOptions.setUserName(username);
mqttConnectOptions.setPassword(password.toCharArray());
mqttConnectOptions.setServerURIs(new String[]{hostUrl});
mqttConnectOptions.setKeepAliveInterval(2);
return mqttConnectOptions;
}
@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
factory.setConnectionOptions(getMqttConnectOptions());
return factory;
}
@Bean
@ServiceActivator(inputChannel = "mqttOutboundChannel")
public MessageHandler mqttOutbound() {
MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(clientId, mqttClientFactory());
messageHandler.setAsync(true);
messageHandler.setDefaultTopic(defaultTopic);
return messageHandler;
}
@Bean
public MessageChannel mqttOutboundChannel() {
return new DirectChannel();
}
}
第四,配置MqttGateway消息推送接口類,在sendToMqtt(String data,@Header(MqttHeaders.TOPIC)String topic)接口中,data為發(fā)送的消息內(nèi)容,topic為主題。指定topic,則我們的接口可以根據(jù)需要,向不同的主題發(fā)送消息,方便靈活應(yīng)用。如果不指定,則使用默認(rèn)配置的主題。
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {
void sendToMqtt(String data,@Header(MqttHeaders.TOPIC) String topic);
}
最后,寫個(gè)接口類測試下功能,用Postman調(diào)用sendMqtt.do接口,往hello主題發(fā)送消息,用MQTTLens訂閱hello主題,從下面截圖,可以看出可以正常往MQTT服務(wù)發(fā)送消息了,而且可以訂閱到。
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private MqttGateway mqttGateway;
@RequestMapping("/sendMqtt.do")
public String sendMqtt(String sendData){
mqttGateway.sendToMqtt(sendData,"hello");
return "OK";
}
}


到此這篇關(guān)于SpringBoot2.0集成MQTT消息推送功能實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot MQTT消息推送內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring整合redis消息監(jiān)聽通知使用的實(shí)現(xiàn)示例
在電商系統(tǒng)中,秒殺,搶購,紅包優(yōu)惠卷等操作,一般都會設(shè)置時(shí)間限制,本文主要介紹了spring整合redis消息監(jiān)聽通知使用,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12
Spring boot項(xiàng)目整合WebSocket方法
這篇文章主要介紹了WebSocket使用Spring boot整合方法,需要繼承webSocketHandler類,重寫幾個(gè)方法就可以了,具體實(shí)例代碼跟隨小編一起看看吧2021-09-09
java過濾html標(biāo)簽獲取純文本信息的實(shí)例
今天小編就為大家分享一篇java過濾html標(biāo)簽獲取純文本信息的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Java遠(yuǎn)程調(diào)用組件Feign技術(shù)使用詳解
Feign是Netflix公司開發(fā)的一個(gè)聲明式的REST調(diào)用客戶端; Ribbon負(fù)載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進(jìn)行微服務(wù)開發(fā)非?;A(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似2022-11-11
MyBatis 動態(tài)SQL之where標(biāo)簽的使用
本文主要介紹了MyBatis 動態(tài)SQL之where標(biāo)簽,where 標(biāo)簽主要用來簡化 SQL 語句中的條件判斷,可以自動處理 AND/OR 條件,下面就來具體介紹一下2024-01-01
Spring MVC多種情況下進(jìn)行文件上傳的實(shí)例
上傳是Web工程中很常見的功能,SpringMVC框架簡化了文件上傳的代碼,本文給大家總結(jié)了Spring MVC多種情況下進(jìn)行文件上傳的實(shí)例,并通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02

