电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

如何在Spring Boot中使用MQTT

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

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

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

消息服務(wù)器 不同應(yīng)用/設(shè)備之間的頻繁交互 可能涉及一對多的消息傳遞

根據(jù)上面列舉的這三點,我們大概可以了解到, MQTT最適合的場景是消息做為系統(tǒng)的重要組成部分,且參與著系統(tǒng)關(guān)鍵業(yè)務(wù)邏輯的情形

MQTT, 啟動!

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

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

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

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

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

使用方式

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

使用spring-integration的消息通道概念 使用傳統(tǒng)的Client客戶端概念

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

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

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

其實, MQTT的使用流程就是: 生產(chǎn)者給主題發(fā)消息->broker進行消息的傳遞->訂閱該主題的消費者拿到消息并進行相應(yīng)的業(yè)務(wù)邏輯

Client模式

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

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

創(chuàng)建工廠類

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

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(); // 設(shè)置自動重連, 其它具體參數(shù)可以查看MqttConnectOptions options.setAutomaticReconnect(true); if (!client.isConnected()) { client.connect(options); } } catch (MqttException e) { LOGGER.error(String.format('MQTT: 連接消息服務(wù)器[%s]失敗', configuration.getAddress())); } } }

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

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

創(chuàng)建工具類

接下來, 我們創(chuàng)建MqttUtil, 用于消息的發(fā)送以及主題的訂閱

public class MqttUtil { /** * 發(fā)送消息 * @param topic 主題 * @param data 消息內(nèi)容 */ public static void send(String topic, Object data) { // 獲取客戶端實例MqttClient client = MqttFactory.getInstance(); ObjectMapper mapper = new ObjectMapper(); try { // 轉(zhuǎn)換消息為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]發(fā)送消息轉(zhuǎn)換json失敗', topic)); } catch (MqttException e) { LOGGER.error(String.format('MQTT: 主題[%s]發(fā)送消息失敗', topic)); } }/** * 訂閱主題 * @param topic 主題 * @param listener 消息監(jiān)聽處理器 */ 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這個東西, 我們只需要創(chuàng)建一個監(jiān)聽類, 實現(xiàn)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]發(fā)來消息[%s]', topic, new String(mqttMessage.getPayload()))); }public static void main(String[] args) { //訂閱主題test01, 使用MessageListener來處理它的消息MqttUtil.subscribe('test01', new MessageListener()); }}

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

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

Spring Integration

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

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

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

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

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

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

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

生產(chǎn)者: 創(chuàng)建指定客戶端工廠的出站通道->發(fā)送消息 消費者: 創(chuàng)建指定消息適配器的入站通道->接收消息->進入消息攔截器->業(yè)務(wù)邏輯

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

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

總結(jié)

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

如何利用qos機制保證數(shù)據(jù)不會丟失 消息的隊列和排序 集群模式下的應(yīng)用

以上就是如何在Spring Boot中使用MQTT的詳細內(nèi)容,更多關(guān)于在Spring Boot中使用MQTT的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 数控走心机-双主轴走心机厂家-南京建克 | 罐体电伴热工程-消防管道电伴热带厂家-山东沃安电气 | 塑钢件_塑钢门窗配件_塑钢配件厂家-文安县启泰金属制品有限公司 深圳南财多媒体有限公司介绍 | 除尘布袋_液体过滤袋_针刺毡滤料-杭州辉龙过滤技术有限公司 | 刮板输送机,粉尘加湿搅拌机,螺旋输送机,布袋除尘器 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 灌装封尾机_胶水灌装机_软管灌装封尾机_无锡和博自动化机械制造有限公司 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 软瓷_柔性面砖_软瓷砖_柔性石材_MCM软瓷厂家_湖北博悦佳软瓷 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 微型实验室真空泵-无油干式真空泵-微型涡旋耐腐蚀压缩机-思科涡旋科技(杭州)有限公司 | 劳动法网-专业的劳动法和劳动争议仲裁服务网| 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 连栋温室大棚建造厂家-智能玻璃温室-薄膜温室_青州市亿诚农业科技 | 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 石膏基自流平砂浆厂家-高强石膏基保温隔声自流平-轻质抹灰石膏粉砂浆批发-永康市汇利建设有限公司 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 选矿设备,选矿生产线,选矿工艺,选矿技术-昆明昆重矿山机械 | 便携式谷丙转氨酶检测仪|华图生物科技百科 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 货车视频监控,油管家,货车油管家-淄博世纪锐行电子科技 | 飞象网 - 通信人每天必上的网站| 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 罗氏牛血清白蛋白,罗氏己糖激酶-上海嵘崴达实业有限公司 | 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 |