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

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

SpringBoot+MQTT+apollo實(shí)現(xiàn)訂閱發(fā)布功能的示例

瀏覽:14日期:2023-05-11 09:40:20

由于最近公司在開發(fā)一款后臺(tái)與安卓的更新系統(tǒng),經(jīng)過再三研究之后,也是選擇Mqtt這個(gè)目前流行的框架。為了能夠讓項(xiàng)目運(yùn)營(yíng)起來,最終雖說是選擇ActiveMQ。但在這個(gè)過程中,也是發(fā)現(xiàn)Apollo作為服務(wù)器也是相當(dāng)不錯(cuò)。當(dāng)然對(duì)于后者已經(jīng)被apace放棄,不過今天還是和大家整理一下SpringBoot+MQTT+apollo實(shí)現(xiàn)訂閱發(fā)布功能的全過程。

對(duì)于項(xiàng)目首先需要用到的前提東西,比如Apollo如何下載,以及MQTT測(cè)試工具在這里就不多說。如果真的不懂私聊Damon吧,在這里就不浪費(fèi)時(shí)間。

對(duì)于項(xiàng)目,首先你所需要引入maven包:

pom.xml

<!-- MQTT --> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> </dependency>

其目標(biāo)就是將MQTT用在項(xiàng)目組中接著就是項(xiàng)目yml文件的配置,使用properties,以葫蘆畫瓢就行了:

applicaiton.yml

mqtt: username: admin password: password host-url: tcp://127.0.0.1:8161 # 你自己服務(wù)器的地址和端口,這個(gè)需要改 clientID: test1 # 這個(gè)改不改隨意,但不同的客戶端肯定不能一樣 default-topic: home/garden/fountain # 默認(rèn)主題 timeout: 100 keepalive: 100# Tomcatserver: tomcat: uri-encoding: UTF-8 max-threads: 1000 min-spare-threads: 30 port: 8088

注意host-url,這就是你apollo的地址

來到第三步,此時(shí)就是項(xiàng)目?jī)?nèi)的文件:

MqttConfig文件

@Component@ConfigurationProperties('mqtt')@Setter@Getterpublic class MqttConfig { @Autowired private MqttPushClient mqttPushClient; /** * 用戶名 */ // @Value('username') private String username; /** * 密碼 */ private String password; /** * 連接地址 */ private String hostUrl; /** * 客戶Id */ private String clientID; /** * 默認(rèn)連接話題 */ private String defaultTopic; /** * 超時(shí)時(shí)間 */ private int timeout; /** * 保持連接數(shù) */ private int keepalive; @Bean public MqttPushClient getMqttPushClient() { System.out.println('hostUrl: '+ hostUrl); System.out.println('clientID: '+ clientID); System.out.println('username: '+ username); System.out.println('password: '+ password); System.out.println('timeout: '+timeout); System.out.println('keepalive: '+ keepalive); mqttPushClient.connect(hostUrl, clientID, username, password, timeout, keepalive); // 以/#結(jié)尾表示訂閱所有以test開頭的主題 mqttPushClient.subscribe(defaultTopic, 0); return mqttPushClient; }}

目的就是配置所對(duì)應(yīng)的消息

第四步就是發(fā)布以及訂閱等功能:

MqttPushClient

@Componentpublic class MqttPushClient { private static final Logger logger = LoggerFactory.getLogger(MqttPushClient.class); @Autowired private PushCallback pushCallback; private static MqttClient client; private static MqttClient getClient() { return client; } private static void setClient(MqttClient client) { MqttPushClient.client = client; } /** * 客戶端連接 * * @param host ip+端口 * @param clientID 客戶端Id * @param username 用戶名 * @param password 密碼 * @param timeout 超時(shí)時(shí)間 * @param keepalive 保留數(shù) */ public void connect(String host, String clientID, String username, String password, int timeout, int keepalive) { MqttClient client; try { client = new MqttClient(host, clientID, new MemoryPersistence()); MqttConnectOptions options = new MqttConnectOptions(); options.setCleanSession(true); options.setUserName(username); options.setPassword(password.toCharArray()); options.setConnectionTimeout(timeout); options.setKeepAliveInterval(keepalive); MqttPushClient.setClient(client); try {client.setCallback(pushCallback);client.connect(options); } catch (Exception e) {e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } /** * 發(fā)布 * * @param qos 連接方式 * @param retained 是否保留 * @param topic 主題 * @param pushMessage 消息體 */ public void publish(int qos, boolean retained, String topic, String pushMessage) { MqttMessage message = new MqttMessage(); message.setQos(qos); message.setRetained(retained); message.setPayload(pushMessage.getBytes()); MqttTopic mTopic = MqttPushClient.getClient().getTopic(topic); if (null == mTopic) { logger.error('topic not exist'); } MqttDeliveryToken token; try { token = mTopic.publish(message); token.waitForCompletion(); } catch (MqttPersistenceException e) { e.printStackTrace(); } catch (MqttException e) { e.printStackTrace(); } } /** * 訂閱某個(gè)主題 * * @param topic 主題 * @param qos 連接方式 */ public void subscribe(String topic, int qos) { logger.info('開始訂閱主題' + topic); try { MqttPushClient.getClient().subscribe(topic, qos); } catch (MqttException e) { e.printStackTrace(); } }}

訂閱主題以及發(fā)布的方式等內(nèi)容更多編寫最后在搞個(gè)測(cè)試看看我們的結(jié)果是否正確:

TestController

@RestController@RequestMapping('/')public class TestController { @Autowired private MqttPushClient mqttPushClient; @GetMapping(value = '/publishTopic') public String publishTopic() { String topicString = 'home/garden/fountain'; mqttPushClient.publish(0, false, topicString, '測(cè)試一下發(fā)布消息'); return 'ok'; } // 發(fā)送自定義消息內(nèi)容(使用默認(rèn)主題) @RequestMapping('/publishTopic/{data}') public String test1(@PathVariable('data') String data) { String topicString = 'home/garden/fountain'; mqttPushClient.publish(0,false,topicString, data); return 'ok'; } // 發(fā)送自定義消息內(nèi)容,且指定主題 @RequestMapping('/publishTopic/{topic}/{data}') public String test2(@PathVariable('topic') String topic, @PathVariable('data') String data) { mqttPushClient.publish(0,false,topic, data); return 'ok'; }}

如此一來就OK!

你可以使用MQTT.fx進(jìn)行測(cè)試。用Postman發(fā)出,就能夠查看最終的結(jié)果。在這里,因?yàn)闀r(shí)間的原因就不多說,有啥有趣的問題,咱們可以一同探討。 希望你希望,Damon將會(huì)不斷的分享各種有趣的開發(fā)小故事給大家娛樂。下一期,或在POI實(shí)現(xiàn)導(dǎo)出導(dǎo)入或者是ActiveMQ進(jìn)行選擇。

到此這篇關(guān)于SpringBoot+MQTT+apollo實(shí)現(xiàn)訂閱發(fā)布功能的示例的文章就介紹到這了,更多相關(guān)SpringBoot+MQTT+apollo訂閱發(fā)布內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 上海律师事务所_上海刑事律师免费咨询平台-煊宏律师事务所 | 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 网站建设-网站制作-网站设计-网站开发定制公司-网站SEO优化推广-咏熠软件 | 走心机厂家,数控走心机-台州博城智能科技有限公司 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 北京开源多邦科技发展有限公司官网 | 热风机_工业热风机生产厂家上海冠顶公司提供专业热风机图片价格实惠 | 免费B2B信息推广发布平台 - 推发网 | b2b网站大全,b2b网站排名,找b2b网站就上地球网 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 英超直播_英超免费在线高清直播_英超视频在线观看无插件-24直播网 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 电子元器件呆滞料_元器件临期库存清仓尾料_尾料优选现货采购处理交易商城 | 刮板输送机,粉尘加湿搅拌机,螺旋输送机,布袋除尘器 | 塑胶跑道施工-硅pu篮球场施工-塑胶网球场建造-丙烯酸球场材料厂家-奥茵 | 事迹材料_个人事迹名人励志故事 学生作文网_中小学生作文大全与写作指导 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 六自由度平台_六自由度运动平台_三自由度摇摆台—南京全控科技 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 自动部分收集器,进口无油隔膜真空泵,SPME固相微萃取头-上海楚定分析仪器有限公司 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | 校服厂家,英伦校服定做工厂,园服生产定制厂商-东莞市艾咪天使校服 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 德州万泰装饰 - 万泰装饰装修设计软装家居馆 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 生产加气砖设备厂家很多,杜甫机械加气砖设备价格公道 |