Springboot整合activemq的方法步驟
今天呢心血來潮,也有很多以前的學弟問到我關(guān)于消息隊列的一些問題,有個剛?cè)腴T,有的有問題都來問我,那么今天來說說如何快速入門mq。
一、首先說下什么是消息隊列?
1.消息隊列是在消息的傳輸過程中保存消息的容器。
二、為什么要用到消息隊列?
主要原因是由于在高并發(fā)環(huán)境下,由于來不及同步處理,請求往往會發(fā)生堵塞,比如說,大量的insert,update之類的請求同時到達 MySQL ,直接導致無數(shù)的行鎖表鎖,甚至最后請求會堆積過多,從而觸發(fā)too many connections錯誤。通過使用消息隊列,我們可以異步處理請求,從而緩解系統(tǒng)的壓力。
三、消息隊列都分為哪幾種?
1. ActiveMQ/ApolloMQ
優(yōu)點:老牌的消息隊列,使用Java語言編寫。對JMS支持最好,采用多線程并發(fā),資源消耗比較大。如果你的主語言是Java,可以重點考慮。
缺點:由于歷史悠久,歷史包袱較多,版本更新很緩慢。集群模式需要依賴Zookeeper實現(xiàn)。最新架構(gòu)的產(chǎn)品被命名為Apollo,號稱下一代ActiveMQ,目前案例較少。
2. RocketMQ/Kafka
優(yōu)點:專為海量消息傳遞打造,主張使用拉模式,天然的集群、HA、負載均衡支持。話說還是那句話,適合不適合看你有沒有那么大的量。
缺點:所謂魚和熊掌不可兼得,放棄了一些消息中間件的靈活性,使用的場景較窄,需關(guān)注你的業(yè)務(wù)模式是否契合,否則山寨變相使用很別扭。除此之外,RocketMQ沒有.NET下的客戶端可用。RocketMQ身出名門,但使用者不多,生態(tài)較小,畢竟消息量能達到這種體量的公司不多,你也可以直接去購買阿里云的消息服務(wù)。Kafka生態(tài)完善,其代碼是用Scala語言寫成,可靠性比RocketMQ低一些。
3. RabbitMQ
優(yōu)點:生態(tài)豐富,使用者眾,有很多人在前面踩坑。AMQP協(xié)議的領(lǐng)導實現(xiàn),支持多種場景。淘寶的MySQL集群內(nèi)部有使用它進行通訊,OpenStack開源云平臺的通信組件,最先在金融行業(yè)得到運用。
缺點:Erlang代碼你Hold得住不? 雖然Erlang是天然集群化的,但RabbitMQ在高可用方面做起來還不是特別得心應(yīng)手,別相信廣告。
四、我們今天重要說下如何快速上手activemq,也是在mq中最容易上手的一種
1.首先我們先下載activemq 鏈接 http://activemq.apache.org/download.html
2. 
3.下載對應(yīng)的版本

4.啟動activemq(我這里是mac環(huán)境,windows可雙擊運行)



出現(xiàn)這個說明mq已經(jīng)啟動我可可以通過active默認的端口號運行https://http://localhost:8161/

這里看到他會alert一個登陸窗口 默認賬號密碼都為admin

點擊Queues查看隊列是的消息,這樣我們activemq就算運行了

那么現(xiàn)在我將它整合在springboot里,也十分簡單 首先看下項目結(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
這里注意了配置的端口號和啟動端口號不是一直的,默認為61616,在conf的jetty.xml下課進行查看也可以修改
咱們直接上代碼
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到底引用的那個包
jmsTemplate.send是向隊列里發(fā)送消息,并且為隊列起一個名字
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)聽器,當mq里有數(shù)據(jù)后第一時間把消息監(jiān)聽到,我們跑一把試試

當敲下enter那一刻,控制臺已經(jīng)把剛剛存進去的消息給打印了出來

那這個時候我們再來看下activemq的服務(wù)中是否有消息

可以看到這時候隊列里已經(jīng)有了q2這個消息。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring MVC中使用Google kaptcha驗證碼的方法詳解
kaptcha 是一個非常實用的驗證碼生成工具。有了它,你可以生成各種樣式的驗證碼,因為它是可配置的,下面這篇文章主要給大家介紹了關(guān)于Spring MVC中使用Google kaptcha驗證碼的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10
Spring Boot/Angular整合Keycloak實現(xiàn)單點登錄功能
Keycloak新的發(fā)行版命名為Quarkus,專為GraalVM和OpenJDK HotSpot量身定制的一個Kurbernetes Native Java框架,計劃2019年底正式發(fā)布。這篇文章主要介紹了Spring Boot/Angular整合Keycloak實現(xiàn)單點登錄,需要的朋友可以參考下2019-10-10
Springdoc替換swagger的實現(xiàn)步驟分解
最近在spring看到的,spring要對api文檔動手了,有些人說swagger不好用,其實也沒那么不好用,有人說代碼還是有點侵入性,這倒是真的,我剛試了springdoc可以說還是有侵入性但是也可以沒有侵入性,這就看你對文檔有什么要求了2023-02-02
詳解使用Java代碼讀取并比較本地兩個txt文件區(qū)別
這篇文章主要為大家介紹了使用Java代碼讀取并比較本地兩個txt文件區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之貪心算法
我們可能在好多地方都會聽到貪心算法這一概念,并且它的算法思想也比較簡單就是說算法只保證局部最優(yōu),進而達到全局最優(yōu)。但我們實際編程的過程中用的并不是很多,究其原因可能是貪心算法使用的條件比較苛刻,所要解決的問題必須滿足貪心選擇性質(zhì)2022-02-02
SpringSecurity在單機環(huán)境下使用方法詳解
本文詳細介紹了SpringSecurity和SpringBoot的整合過程,包括配置用戶認證、JSP頁面的使用、數(shù)據(jù)庫認證以及授權(quán)功能的實現(xiàn),感興趣的朋友一起看看吧2025-02-02
JAVA中的延遲隊列DelayQueue應(yīng)用解析
這篇文章主要介紹了JAVA中的延遲隊列DelayQueue應(yīng)用解析,DelayQueue是一個根據(jù)元素的到期時間來排序的隊列,而并非是一般的隊列那樣先進先出,最快過期的元素排在隊首,越晚到期的元素排得越后,需要的朋友可以參考下2023-12-12

