Springboot整合activemq的方法步驟
今天呢心血來潮,也有很多以前的學(xué)弟問到我關(guān)于消息隊(duì)列的一些問題,有個(gè)剛?cè)腴T,有的有問題都來問我,那么今天來說說如何快速入門mq。
一、首先說下什么是消息隊(duì)列?
1.消息隊(duì)列是在消息的傳輸過程中保存消息的容器。
二、為什么要用到消息隊(duì)列?
主要原因是由于在高并發(fā)環(huán)境下,由于來不及同步處理,請求往往會(huì)發(fā)生堵塞,比如說,大量的insert,update之類的請求同時(shí)到達(dá) MySQL ,直接導(dǎo)致無數(shù)的行鎖表鎖,甚至最后請求會(huì)堆積過多,從而觸發(fā)too many connections錯(cuò)誤。通過使用消息隊(duì)列,我們可以異步處理請求,從而緩解系統(tǒng)的壓力。
三、消息隊(duì)列都分為哪幾種?
1. ActiveMQ/ApolloMQ
優(yōu)點(diǎn):老牌的消息隊(duì)列,使用Java語言編寫。對JMS支持最好,采用多線程并發(fā),資源消耗比較大。如果你的主語言是Java,可以重點(diǎn)考慮。
缺點(diǎn):由于歷史悠久,歷史包袱較多,版本更新很緩慢。集群模式需要依賴Zookeeper實(shí)現(xiàn)。最新架構(gòu)的產(chǎn)品被命名為Apollo,號稱下一代ActiveMQ,目前案例較少。
2. RocketMQ/Kafka
優(yōu)點(diǎn):專為海量消息傳遞打造,主張使用拉模式,天然的集群、HA、負(fù)載均衡支持。話說還是那句話,適合不適合看你有沒有那么大的量。
缺點(diǎn):所謂魚和熊掌不可兼得,放棄了一些消息中間件的靈活性,使用的場景較窄,需關(guān)注你的業(yè)務(wù)模式是否契合,否則山寨變相使用很別扭。除此之外,RocketMQ沒有.NET下的客戶端可用。RocketMQ身出名門,但使用者不多,生態(tài)較小,畢竟消息量能達(dá)到這種體量的公司不多,你也可以直接去購買阿里云的消息服務(wù)。Kafka生態(tài)完善,其代碼是用Scala語言寫成,可靠性比RocketMQ低一些。
3. RabbitMQ
優(yōu)點(diǎn):生態(tài)豐富,使用者眾,有很多人在前面踩坑。AMQP協(xié)議的領(lǐng)導(dǎo)實(shí)現(xiàn),支持多種場景。淘寶的MySQL集群內(nèi)部有使用它進(jìn)行通訊,OpenStack開源云平臺(tái)的通信組件,最先在金融行業(yè)得到運(yùn)用。
缺點(diǎn):Erlang代碼你Hold得住不? 雖然Erlang是天然集群化的,但RabbitMQ在高可用方面做起來還不是特別得心應(yīng)手,別相信廣告。
四、我們今天重要說下如何快速上手activemq,也是在mq中最容易上手的一種
1.首先我們先下載activemq 鏈接 http://activemq.apache.org/download.html
2.
3.下載對應(yīng)的版本
4.啟動(dòng)activemq(我這里是mac環(huán)境,windows可雙擊運(yùn)行)
出現(xiàn)這個(gè)說明mq已經(jīng)啟動(dòng)我可可以通過active默認(rèn)的端口號運(yùn)行https://http://localhost:8161/
這里看到他會(huì)alert一個(gè)登陸窗口 默認(rèn)賬號密碼都為admin
點(diǎn)擊Queues查看隊(duì)列是的消息,這樣我們activemq就算運(yùn)行了
那么現(xiàn)在我將它整合在springboot里,也十分簡單 首先看下項(xiàng)目結(jié)構(gòu)
5.加入依賴 本次用的gradle
compile('org.springframework.boot:spring-boot-starter-activemq:2.1.1.RELEASE')
6.yml配置
spring: activemq: broker-url: tcp://localhost:61616 user: admin password: admin
這里注意了配置的端口號和啟動(dòng)端口號不是一直的,默認(rèn)為61616,在conf的jetty.xml下課進(jìn)行查看也可以修改
咱們直接上代碼
7.Controller
package com.gd.acticemqtest.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.MessageCreator; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; import javax.jms.TextMessage; /** * @DATA 2019-01-09 22:42 * @Author 張國偉 WeChat:17630376104 * @Description TODO */ @RestController public class controllerDemo { @Autowired private JmsTemplate jmsTemplate; @RequestMapping("/sendMsg") public void sendMsg(String msg) { jmsTemplate.send("q2", new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { TextMessage textMessage = session.createTextMessage(); textMessage.setText(msg); return textMessage; } }); }
這里一定要注意的是JmsTemplate到底引用的那個(gè)包
jmsTemplate.send是向隊(duì)列里發(fā)送消息,并且為隊(duì)列起一個(gè)名字
package com.gd.acticemqtest.serive; import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Service; /** * @DATA 2019-01-09 22:54 * @Author 張國偉 WeChat:17630376104 * @Description TODO */ @Service public class ActiveMsgListener { @JmsListener(destination = "q2") public void rctiveMsg(String message){ System.out.println("------監(jiān)聽到activemq的數(shù)據(jù)"+message); } }
jmsListener是spring的針對消息的監(jiān)聽器,當(dāng)mq里有數(shù)據(jù)后第一時(shí)間把消息監(jiān)聽到,我們跑一把試試
當(dāng)敲下enter那一刻,控制臺(tái)已經(jīng)把剛剛存進(jìn)去的消息給打印了出來
那這個(gè)時(shí)候我們再來看下activemq的服務(wù)中是否有消息
可以看到這時(shí)候隊(duì)列里已經(jīng)有了q2這個(gè)消息。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實(shí)戰(zhàn):Spring如何找到對應(yīng)轉(zhuǎn)換器優(yōu)雅使用枚舉參數(shù)
這篇文章主要介紹了SpringBoot實(shí)戰(zhàn)中Spring是如何找到對應(yīng)轉(zhuǎn)換器優(yōu)雅的使用枚舉參數(shù),文中附有詳細(xì)的實(shí)例代碼有需要的朋友可以參考下,希望可以有所幫助2021-08-08JavaWeb 中Cookie實(shí)現(xiàn)記住密碼的功能示例
cookie是一種WEB服務(wù)器通過瀏覽器在訪問者的硬盤上存儲(chǔ)信息的手段。Cookie的目的就是為用戶帶來方便,為網(wǎng)站帶來增值。這篇文章主要介紹了JavaWeb 中Cookie實(shí)現(xiàn)記住密碼的功能示例,需要的朋友可以參考下2017-06-06Spring注解@EnableWebMvc使用的坑點(diǎn)及解析
這篇文章主要介紹了Spring注解@EnableWebMvc使用的坑點(diǎn)及解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09springboot 運(yùn)行 jar 包讀取外部配置文件的問題
這篇文章主要介紹了springboot 運(yùn)行 jar 包讀取外部配置文件,本文主要描述linux系統(tǒng)執(zhí)行jar包讀取jar包同級目錄的外部配置文件,主要分為兩種方法,每種方法通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07Java分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)原理與用法詳解
這篇文章主要介紹了Java分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)原理與用法,結(jié)合實(shí)例形式分析了java分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、跳轉(zhuǎn)語句等相關(guān)概念、原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02Java String類詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java String類詳解,本文經(jīng)多方資料的收集整理和歸納,最終撰寫成文,非常不錯(cuò),值得收藏,需要的的朋友參考下2017-04-04