SpringBoot整合ActiveMQ

ActiveMQ簡(jiǎn)介
ActiveMQ 是Apache出品蜗元,最流行的掌敬,能力強(qiáng)勁的開源消息總線。ActiveMQ 是一個(gè)完全支持JMS1.1和J2EE 1.4規(guī)范的 JMS Provider實(shí)現(xiàn)芯杀,盡管JMS規(guī)范出臺(tái)已經(jīng)是很久的事情了,但是JMS在當(dāng)今的J2EE應(yīng)用中間仍然扮演著特殊的地位。

ActiveMQ特性

  1. 多語言和協(xié)議編寫客戶端揭厚。語言: Java,C,C++,C#,Ruby,Perl,Python,PHP却特。應(yīng)用協(xié)議:
    OpenWire,Stomp REST,WS Notification,XMPP,AMQP。
  2. 完全支持JMS1.1和J2EE 1.4規(guī)范(持久化筛圆、XA消息裂明,事物)。
  3. 對(duì)Spring的支持太援,ActiveMQ可以很容易嵌套到使用Spring的系統(tǒng)里面去闽晦,而且也支持Spring2.0的特征。
  4. 通過了常見的J2EE服務(wù)器(如Geronimo,JBoss 4,GlassFish,WebLogic)的測(cè)試,其中通過JCA 1.5提岔。
    resource adaptors的配置仙蛉,可以讓ActiveMQ可以自動(dòng)的部署到任何兼容J2EE 1.4 商業(yè)服務(wù)器上。
  5. 支持多種傳送協(xié)議: in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA碱蒙。
  6. 支持通過JDBC和journal提供高速的消息持久化捅儒。
  7. 從設(shè)計(jì)上保證了高性能的集群,客戶端-服務(wù)器振亮,點(diǎn)對(duì)點(diǎn)巧还。
  8. 支持Ajax。
  9. 支持和Axis的整合坊秸。
  10. 可以很容易的調(diào)用內(nèi)嵌JMS provider麸祷,進(jìn)行測(cè)試。

什么情況下使用ActiveMQ?

  • 多個(gè)項(xiàng)目之間集成
    跨平臺(tái)
    多語言
    多項(xiàng)目
  • 降低系統(tǒng)間模塊的耦合度褒搔,解耦
    軟件擴(kuò)展性
  • 系統(tǒng)前后端隔離
    前后端隔離阶牍,屏蔽高安全區(qū)

ActiveMQ安裝
在官方下載ActiveMQ: http://activemq.apache.org/download.html
這次選擇的是Unix版本,解壓安裝包星瘾,啟動(dòng)ActiveMQ:

root@ubuntu:~/apache-activemq-5.15.3/bin# activemq start

訪問ActiveMQ監(jiān)控界面:


這里寫圖片描述

SpringBoot整合ActiveMQ

  • pom文件添加依賴:
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
             <version>5.7.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
  • 在application.yml中加入activemq的配置:
spring:
  activemq:
    broker-url: tcp://192.168.0.197:61616
    user: admin
    password: admin
    pool:
      enabled: false
  • 創(chuàng)建一個(gè)消息生產(chǎn)者:
@Service
public class JMSProducer {

    @Autowired
    private JmsTemplate jmsTemplate;

    // 發(fā)送消息走孽,destination是發(fā)送到的隊(duì)列,message是待發(fā)送的消息
    public void sendMessage(Destination destination, final String message){
        jmsTemplate.convertAndSend(destination, message);
    }

   
}
  • 創(chuàng)建一個(gè)消息消費(fèi)者:
@Component
public class JMSConsumer {
    private final static Logger logger = LoggerFactory.getLogger(JMSConsumer.class);

    @JmsListener(destination = "springboot.queue.test")
    public void receiveQueue(String msg) {
        logger.info("接收到消息:{}",msg);
    }
}

  • 測(cè)試:
@Autowired
    private JMSProducer jmsProducer;

    @Test
    public void testJms() {
        Destination destination = new ActiveMQQueue("springboot.queue.test");
        for (int i=0;i<10;i++) {
            jmsProducer.sendMessage(destination,"hello,world!" + i);
        }
    }
這里寫圖片描述

注:后面多加了兩個(gè)消費(fèi)者琳状。

這里寫圖片描述

可以看到磕瓷,在ActiveMQ監(jiān)控界面上,已經(jīng)存在前面定義的隊(duì)列“springboot.queue.test”念逞。

支持同時(shí)發(fā)送和接收queue/topic

  • 新建一個(gè)JMS的配置類:
@Configuration
public class JmsConfig {
    public final static String TOPIC = "springboot.topic.test";
    public final static String QUEUE = "springboot.queue.test";
    @Bean
    public Queue queue() {
        return new ActiveMQQueue(QUEUE);
    }

    @Bean
    public Topic topic() {
        return new ActiveMQTopic(TOPIC);
    }

    // topic模式的ListenerContainer
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setPubSubDomain(true);
        bean.setConnectionFactory(activeMQConnectionFactory);
        return bean;
    }
    // queue模式的ListenerContainer
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setConnectionFactory(activeMQConnectionFactory);
        return bean;
    }
}

  • 新增消息消費(fèi)者JMSConsumer3 困食,指定ConnectionFactory:
@Component
public class JMSConsumer3 {
    private final static Logger logger = LoggerFactory.getLogger(JMSConsumer3.class);

    @JmsListener(destination = JmsConfig.TOPIC,containerFactory = "jmsListenerContainerTopic")
    public void onTopicMessage(String msg) {
        logger.info("接收到topic消息:{}",msg);
    }

    @JmsListener(destination = JmsConfig.QUEUE,containerFactory = "jmsListenerContainerQueue")
    public void onQueueMessage(String msg) {
        logger.info("接收到queue消息:{}",msg);
    }
}
  • 測(cè)試:
    @Autowired
    private Topic topic;
    @Autowired
    private Queue queue;

    @Test
    public void testJms2() {
        for (int i=0;i<10;i++) {
            jmsProducer.sendMessage(queue,"queue,world!" + i);
            jmsProducer.sendMessage(topic, "topic,world!" + i);
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市翎承,隨后出現(xiàn)的幾起案子硕盹,更是在濱河造成了極大的恐慌,老刑警劉巖叨咖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘩例,死亡現(xiàn)場(chǎng)離奇詭異啊胶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)垛贤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門焰坪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人南吮,你說我怎么就攤上這事√茏茫” “怎么了部凑?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)碧浊。 經(jīng)常有香客問我涂邀,道長(zhǎng),這世上最難降的妖魔是什么箱锐? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任比勉,我火速辦了婚禮,結(jié)果婚禮上驹止,老公的妹妹穿的比我還像新娘浩聋。我一直安慰自己,他們只是感情好臊恋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布衣洁。 她就那樣靜靜地躺著,像睡著了一般抖仅。 火紅的嫁衣襯著肌膚如雪坊夫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天撤卢,我揣著相機(jī)與錄音环凿,去河邊找鬼。 笑死放吩,一個(gè)胖子當(dāng)著我的面吹牛智听,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渡紫,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼瞭稼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了腻惠?” 一聲冷哼從身側(cè)響起环肘,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎集灌,沒想到半個(gè)月后悔雹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體复哆,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年腌零,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梯找。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡益涧,死狀恐怖锈锤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闲询,我是刑警寧澤久免,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站扭弧,受9級(jí)特大地震影響阎姥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸽捻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一呼巴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧御蒲,春花似錦衣赶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痰滋,卻和暖如春摘能,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敲街。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工团搞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人多艇。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓逻恐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親峻黍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子复隆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容