日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何在Spring Boot中使用MQTT

瀏覽:42日期:2023-07-16 18:07:38
為什么選擇MQTT

MQTT的定義相信很多人都能講的頭頭是道,本文章也不討論什么高大上的東西,旨在用最簡單直觀的方式讓每一位剛接觸的同行們可以最快的應用起來

先從使用MQTT需要什么開始分析:

消息服務器 不同應用/設備之間的頻繁交互 可能涉及一對多的消息傳遞

根據上面列舉的這三點,我們大概可以了解到, MQTT最適合的場景是消息做為系統的重要組成部分,且參與著系統關鍵業務邏輯的情形

MQTT, 啟動!

既然決定使用它,我們首先要研究的是如何讓MQTT正常工作,畢竟它不是簡單的在maven里加入個依賴就完事的

我們總共需要干如下兩件事:

下載EMQX消息服務器, 作為broker 在maven中引入依賴

<dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> <version>5.3.2.RELEASE</version> </dependency>

完成上面兩步后, 啟動EMQX服務器, 正式進入我們的MQTT旅途

使用方式

在Spring Boot中使用MQTT的代碼, 筆者總結了如下兩種方式:

使用spring-integration的消息通道概念 使用傳統的Client客戶端概念

第一種會產生一定程度的心智負擔,但在筆者成功搭配(抄襲+造輪子)自動注冊后, 比后者要方便許多

在介紹具體代碼之前, 我們先簡單整理下使用中最常見的概念:

主題: MQTT消息的主要傳播途徑, 我們向主題發布消息, 訂閱主題, 從主題中讀取消息并進行業務邏輯處理, 主題是消息的通道 生產者: MQTT消息的發送者, 他們向主題發送消息 消費者: MQTT消息的接收者, 他們訂閱自己需要的主題, 并從中獲取消息 broker: 消息轉發器, 消息是通過它來承載的, EMQX就是我們的broker, 在使用中我們不用關心它的具體實現

其實, MQTT的使用流程就是: 生產者給主題發消息->broker進行消息的傳遞->訂閱該主題的消費者拿到消息并進行相應的業務邏輯

Client模式

本模式和傳統的數據庫鏈接,Redis鏈接基本一致,有開發經驗的小伙伴們可以很輕松的駕馭,我們需要考慮的就是如果創建對應的工廠,是單例模式,還是原型,亦或是造個池子呢?

我們使用單例模式來進行本次的介紹

創建工廠類

首先, 我們創造一個工廠(就不承認設計模式中毒)

public class MqttFactory { private static MqttProperties configuration; private static MqttClient client; /** * 獲取客戶端實例 * 單例模式, 存在則返回, 不存在則初始化 */ public static MqttClient getInstance() { if (client == null) { init(); } return client; } /** * 初始化客戶端 */ public static void init() { try { client = new MqttClient(configuration.getAddress(), 'client-' + System.currentTimeMillis()); // MQTT配置對象 MqttConnectOptions options = new MqttConnectOptions(); // 設置自動重連, 其它具體參數可以查看MqttConnectOptions options.setAutomaticReconnect(true); if (!client.isConnected()) { client.connect(options); } } catch (MqttException e) { LOGGER.error(String.format('MQTT: 連接消息服務器[%s]失敗', configuration.getAddress())); } } }

關于MQTT的具體配置可以查看MqttConnectOptions, 在這里就不做說明了

多嘴一句, 文檔永遠比某些博客給力!!!

創建工具類

接下來, 我們創建MqttUtil, 用于消息的發送以及主題的訂閱

public class MqttUtil { /** * 發送消息 * @param topic 主題 * @param data 消息內容 */ public static void send(String topic, Object data) { // 獲取客戶端實例MqttClient client = MqttFactory.getInstance(); ObjectMapper mapper = new ObjectMapper(); try { // 轉換消息為json字符串 String json = mapper.writeValueAsString(data); client.publish(topic, new MqttMessage(json.getBytes(StandardCharsets.UTF_8))); } catch (JsonProcessingException e) { LOGGER.error(String.format('MQTT: 主題[%s]發送消息轉換json失敗', topic)); } catch (MqttException e) { LOGGER.error(String.format('MQTT: 主題[%s]發送消息失敗', topic)); } }/** * 訂閱主題 * @param topic 主題 * @param listener 消息監聽處理器 */ public static void subscribe(String topic, IMqttMessageListener listener) { MqttClient client = MqttFactory.getInstance(); try {client.subscribe(topic, listener); } catch (MqttException e) {LOGGER.error(String.format('MQTT: 訂閱主題[%s]失敗', topic)); } } }

相信小伙伴們注意到了IMqttMessageListener這個東西, 我們只需要創建一個監聽類, 實現IMqttMessageListener接口, 就可以處理消息啦, 代碼如下:

public class MessageListener implements IMqttMessageListener { /** * 處理消息 * @param topic 主題 * @param mqttMessage 消息 */ @Override public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { LOGGER.info(String.format('MQTT: 訂閱主題[%s]發來消息[%s]', topic, new String(mqttMessage.getPayload()))); }public static void main(String[] args) { //訂閱主題test01, 使用MessageListener來處理它的消息MqttUtil.subscribe('test01', new MessageListener()); }}

無論是發送還是訂閱,是不是都很好理解?

舒服的事情結束后, 帶來的是無盡的折磨和空虛, 來吧, 讓我們挑戰下心智負擔大的第二種模式!

Spring Integration

什么是Spring Integration?對不起,我不知道,我也不想知道

為什么使用Spring Integration?因為它真的很好維護

網上大部分教程都是針對Spring Integration的, 可能是我第一次接觸, 千篇一律看的我莫名其妙, 所以我選擇放棄了他們, 選擇了大神的自動配置方式,并在其基礎上,針對心智負擔進行了相應的調整

還記得我們之前討論過的概念嗎?主題/生產者/消費者

在Spring Integration中,我們新加入一些概念, 并把之前的進行微調:

通道: 消息傳輸和接受的管道, 每一條消息都是通過它鉆進鉆出 客戶端工廠: 用于創建MQTT客戶端, 和模式一中的類似 消息適配器: 用于接收MQTT消息, 進行轉換, 但不參與業務邏輯 入站通道: 搭配消息適配器, 消息進入站臺的通道 出站通道: 搭配客戶端工廠, 消息發出站臺的通道 主題: 還是主題, 它不變 生產者: 擁有出站通道的家伙 消費者: 擁有入站通道的家伙

如果能漸漸理解上面定義的話, 這種模式的流程其實可以變成這樣:

生產者: 創建指定客戶端工廠的出站通道->發送消息 消費者: 創建指定消息適配器的入站通道->接收消息->進入消息攔截器->業務邏輯

其實在筆者看來, 這符合Spring Boot的理念, 約定優于配置

代碼已挪入公司私服, 待后續個人私服配置好后再補充筆記

總結

MQTT作為消息服務, 能夠滿足我們大部分的開發需求, 但還有一些遺留問題筆者還沒進行過深入思考和實踐:

如何利用qos機制保證數據不會丟失 消息的隊列和排序 集群模式下的應用

以上就是如何在Spring Boot中使用MQTT的詳細內容,更多關于在Spring Boot中使用MQTT的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产毛片久久久| 久久久久网站| 午夜久久一区| 伊人久久大香线蕉av不卡| 涩涩av在线| 日韩一区二区在线免费| 成人福利视频| 99精品视频在线| 欧美在线亚洲| 免费看黄色91| 欧美中文一区| 国产精品视频首页| 久久不见久久见国语| 麻豆91小视频| 国产精品久久久久久久久久10秀| 国产精品久久| 国产精品15p| 成人在线免费观看网站| 在线观看精品| 精品三级久久| 日韩一区二区久久| 亚洲精品在线二区| 日本久久一区| 欧美国产极品| 精品国产三区在线| 成人久久久久| 99综合视频| 亚洲精品影视| 欧美黄页在线免费观看| 精品捆绑调教一区二区三区| 狠狠色狠狠色综合日日tαg| 久久一二三区| 国产精品三级| 1000部精品久久久久久久久| 亚洲欧洲国产精品一区| 久久中文欧美| 中文一区二区| 欧美国产日韩电影| 韩国三级一区| 亚洲精品激情| 日韩av在线播放网址| 亚洲国产成人精品女人| 日韩综合一区二区| 国产精品久久久久久久免费观看| 日韩天堂av| 亚洲毛片视频| 久久久久久久欧美精品| 国产精品久久久久久久久免费高清| 高清日韩欧美| 欧美精品一区二区三区精品| 日本在线一区二区三区| 麻豆免费精品视频| 青青青免费在线视频| 亚洲欧美日本视频在线观看| 国产精品一区二区中文字幕| 日韩av一级| 青草国产精品| 亚洲性视频h| 青青伊人久久| 欧美在线观看视频一区| 国产日韩精品视频一区二区三区| 日韩免费小视频| 日本强好片久久久久久aaa| 伊人久久高清| 国产视频网站一区二区三区| 久久亚洲国产| 欧美激情aⅴ一区二区三区 | 久久高清免费| 91精品国产自产观看在线| 国产美女高潮在线观看| 天使萌一区二区三区免费观看| 久久久久九九精品影院| 亚洲综合色婷婷在线观看| 日韩精品麻豆| 国产欧美日韩影院| 99在线观看免费视频精品观看| 精品亚洲a∨一区二区三区18| 欧美午夜不卡影院在线观看完整版免费| 国产精品17p| 亚洲色图网站| 欧美va天堂| 97精品在线| 国产精品久久乐| 婷婷精品在线观看| 最新亚洲一区| 亚洲成人国产| 日韩av自拍| 美女国产一区二区三区| 一区二区国产在线| 亚洲欧美综合| 国产资源在线观看入口av| 国产伦一区二区三区| 亚洲欧美日本视频在线观看| 久久久久久黄| 久久一区欧美| 国产一卡不卡| 亚洲精品看片| 日韩精品一二三四| 亚洲精品97| 欧美成人国产| 日韩和的一区二在线| 久久久久亚洲精品中文字幕| 国产日韩在线观看视频| 综合欧美亚洲| 久久夜色精品| 丝袜亚洲精品中文字幕一区| 在线视频亚洲| 伊人精品一区| 99久久九九| 国产99精品| 99久久婷婷| 欧美性感美女一区二区| 亚洲精品在线二区| 日欧美一区二区| 亚州欧美在线| 综合五月婷婷| 婷婷精品久久久久久久久久不卡| 久久亚洲色图| 一区二区三区网站| 蜜桃一区二区三区在线| 日韩精品一级中文字幕精品视频免费观看 | 久久国产99| 欧美jjzz| 日韩午夜黄色| 国产一级一区二区| 亚洲一区区二区| 蜜桃视频一区二区三区| 国产视频一区欧美| 性欧美长视频| 美国三级日本三级久久99| 一区二区三区四区精品视频| 亚洲视频国产精品| 日韩精品国产欧美| 国产欧美日韩精品高清二区综合区| 欧美在线不卡| 欧美a级一区二区| 日本久久精品| 日本国产精品| 久久aⅴ国产紧身牛仔裤| 一区二区精品| 国产精品资源| 国产精选在线| 91精品国产调教在线观看 | 色婷婷精品视频| av不卡在线| 中文字幕日韩高清在线| 中文字幕一区二区av| 国产欧美高清| 国产盗摄——sm在线视频| 91精品亚洲| 蜜桃视频一区二区| 视频一区二区中文字幕| 亚洲欧美一级| 91精品国产自产精品男人的天堂| 国产激情久久| 亚洲成人va| 午夜欧美理论片| 日本欧美一区| 成人台湾亚洲精品一区二区| 91精品国产自产在线观看永久∴| 爽好久久久欧美精品| 日本不卡视频在线观看| 久久成人福利| 精品日韩视频| 免费在线观看日韩欧美| 国产精品一区高清| 伊人久久视频| 综合干狼人综合首页| 亚洲影院天堂中文av色| 午夜性色一区二区三区免费视频| 国产精品一区高清| 亚洲少妇诱惑| av资源中文在线天堂| 免费一区二区三区在线视频| 亚洲永久av| 亚洲福利一区| 欧美精品影院| 久久中文视频| 日韩国产91| 欧美日韩一区二区综合 | 国产一级一区二区| 国产精品日本一区二区三区在线| 亚洲深夜视频| 日本亚洲不卡| 亚洲播播91| 亚洲一区二区小说| 国产中文欧美日韩在线| 日韩一区二区久久| 黄色精品视频| 欧美资源在线| 久久影视三级福利片| 免费日韩av片| 精品国产欧美| 夜久久久久久| 成人在线视频中文字幕| 亚洲综合激情在线| 午夜精品久久久久久久久久蜜桃| 日本久久一区| 国产亚洲欧洲| 88xx成人免费观看视频库|