SpringBoot2.0集成MQTT消息推送功能實現(xiàn)
這幾天在弄后端管理系統(tǒng)向指定的Android客戶端推送消息的功能模塊,查閱了網(wǎng)上很多博客介紹的許多方式,最終選擇基于MQTT協(xié)議來實現(xiàn),MQTT是一個輕量級的消息發(fā)布/訂閱協(xié)議,它是實現(xiàn)基于手機客戶端的消息推送服務器的理想解決方案。
實現(xiàn)MQTT協(xié)議的中間件有很多,我用的是Apollo服務器,如何搭建MQTT服務器,請查閱其他資料。這里,主要介紹SpringBoot2.0集成MQTT實現(xiàn)消息推送的功能。好,正式開始:
本文采用Gateway綁定的方式,網(wǎng)上也有介紹但不全面,還有其他采用Paho MQTT Client庫的方式實現(xiàn)的。
第一,pom配置,我們需要引入相關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服務器基本信息,在springBoot配置文件application.properties中配置,添加如下:
#MQTT配置信息 #MQTT-用戶名 spring.mqtt.username=admin #MQTT-密碼 spring.mqtt.password=password #MQTT-服務器連接地址,如果有多個,用逗號隔開,如:tcp://127.0.0.1:61613,tcp://192.168.2.133:61613 spring.mqtt.url=tcp://127.0.0.1:61613 #MQTT-連接服務器默認客戶端ID spring.mqtt.client.id=mqttId #MQTT-默認的消息推送主題,實際可在調(diào)用接口時指定 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ā)送消息,方便靈活應用。如果不指定,則使用默認配置的主題。
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel") public interface MqttGateway { void sendToMqtt(String data,@Header(MqttHeaders.TOPIC) String topic); }
最后,寫個接口類測試下功能,用Postman調(diào)用sendMqtt.do接口,往hello主題發(fā)送消息,用MQTTLens訂閱hello主題,從下面截圖,可以看出可以正常往MQTT服務發(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"; } }
到此這篇關于SpringBoot2.0集成MQTT消息推送功能實現(xiàn)的文章就介紹到這了,更多相關SpringBoot MQTT消息推送內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring整合redis消息監(jiān)聽通知使用的實現(xiàn)示例
在電商系統(tǒng)中,秒殺,搶購,紅包優(yōu)惠卷等操作,一般都會設置時間限制,本文主要介紹了spring整合redis消息監(jiān)聽通知使用,具有一定的參考價值,感興趣的可以了解一下2021-12-12