1. 程式人生 > >訊息佇列ActiveMQ+Spring整合

訊息佇列ActiveMQ+Spring整合

  • 訊息佇列MQ簡介
    訊息佇列技術是分散式應用間交換資訊的一種技術。使用訊息佇列可以很好的將任務以非同步的方式進行處理或者進行資料傳送和儲存等。例如當你頻繁地向資料庫中插入資料、頻繁的向搜尋引擎提交資料,就可採取訊息佇列來非同步插入。另外,還可以將較慢/較複雜的處理邏輯、有併發數量限制的處理邏輯,通過訊息佇列放在後臺處理。
    常規的使用場景:簡訊服務、電子郵件服務、圖片處理服務、好友動態推送服務等。
    特性:非同步、順序讀寫、高效能、協議簡單。所以一般會用於解決大量的伺服器端非同步請求,同時可以實現服務端的負載均衡和業務的容災。

    1. ActiveMQ簡介

        ActiveMQ 是Apache出品,最流行的,能力強勁的開源訊息匯流排。ActiveMQ 是一個完全支援JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位
      
  • 訊息模型: 點對點(p2p)、釋出/廣播(Pub/Sub)。

  • 流程:
    p2p:訊息生產者>訊息佇列>訊息消費者

    Pub/Sub:主題>釋出者>訂閱者

    1. ActiveMQ準備

    apache官網下載activeMQ:

進行解壓後執行其bin目錄下面的win32或者win64資料夾下的activemq.bat檔案啟動activeMQ。

  • Maven配置
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId
>
spring-jms</artifactId> <version>4.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version
>
</dependency>

配置connectionFactory
connectionFactory是Spring用於建立到JMS伺服器連結的,Spring提供了多種connectionFactory.

PooledConnectionFactory: JmsTemlate每次傳送訊息時只會快取connection,session和productor,不會快取consumer。因此只適合於生產者傳送訊息,這個只是在要求訊息處理的及時性不是特別高的情況下。

SingleConnectionFactory: 對於建立JMS伺服器連結的請求會一直返回同一個連結,並且會忽略Connection的close方法呼叫。

CachingConnectionFactory: 繼承了SingleConnectionFactory,所以它擁有SingleConnectionFactory的所有功能,同時它還新增了快取功能,它可以快取Session、MessageProducer和MessageConsumer。我們使用CachingConnectionFactory來作為示例。

  1. Spring配置

    applicationContext.xml 設定:

    <!-- 獲取ActiveMQ提供的ConnectionFactory -->
    <amq:connectionFactory id="amqConnectionFactory"
    <!--設定ActiveMQ伺服器地址及埠-->
        brokerURL="failover:(tcp://localhost:61616)?initialReconnectDelay=100" />

    <!-- 配置ActiveMQ伺服器連線conneciotnFactory -->
    <bean id="connectionFactory"
        class="org.springframework.jms.connection.CachingConnectionFactory">
        <!-- 將ActiveMQ提供的ConnectionFactory注入到Spring管理的connectionFactory中 -->
        <constructor-arg ref="amqConnectionFactory" />
        <!--設定快取大小-->
        <property name="sessionCacheSize" value="100" />
    </bean>

    <!-- 配置JMS訊息生產者 -->
    <!-- Spring提供的JMS工具類,它可以進行訊息傳送、接收等 -->
    <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
        <constructor-arg ref="connectionFactory" />
        <!-- 非pub/sub模型(釋出/訂閱),即佇列模式 -->
        <property name="pubSubDomain" value="false" />
    </bean>

    <!-- 定義Queue監聽器 -->
    <jms:listener-container concurrency="10"
        destination-type="queue" container-type="default" connection-factory="connectionFactory" acknowledge="auto">
        <!--監聽的java類-->
        <jms:listener destination="queue" ref="ConsumerMessageListener" />
    </jms:listener-container>
5. **JAVA程式碼**  

**實現傳送訊息到訊息佇列**
@Service("ProducerService")
public class ProducerServiceImpl{

    @Autowired
    private JmsTemplate jmsQueueTemplate;

    public void sendMessage(String destinationName, final String message) {
        System.out.println("------生產者傳送訊息------");
        System.out.println("------生產者發了一個訊息:" + message);
        jmsQueueTemplate.send(destinationName, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                // TODO Auto-generated method stub
                return session.createTextMessage(message);
            }
        });
    }

}

實現訊息監聽,獲取訊息並消費

@Component("ConsumerMessageListener")
public class ConsumerMessageListener implements MessageListener {

    public void onMessage(Message message) {
        // TODO Auto-generated method stub
        TextMessage textMsg = (TextMessage) message;
        System.out.println("接收到一個純文字訊息.");
        try {
            System.out.println("訊息內容是:" + textMsg.getText());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

相關推薦

訊息佇列ActiveMQ+Spring整合

訊息佇列MQ簡介 訊息佇列技術是分散式應用間交換資訊的一種技術。使用訊息佇列可以很好的將任務以非同步的方式進行處理或者進行資料傳送和儲存等。例如當你頻繁地向資料庫中插入資料、頻繁的向搜尋引擎

springboot2.x簡單詳細教程--訊息佇列介紹及整合ActiveMQ (第十三章)

一、JMS介紹和使用場景及基礎程式設計模型     簡介:講解什麼是小寫佇列,JMS的基礎知識和使用場景     1、什麼是JMS: Java訊息服務(Java Message Service),Java平臺中關於面向訊息中介

java面試—訊息佇列ActiveMQ

1.如何使用ActiveMq解決分散式事物     在應用中,都會有使用者註冊功能:收集使用者錄入資訊,儲存到資料庫—向用戶的手機或郵箱發驗證碼······     在傳統集中式架構,實現功能:開啟一個本地事物,往本地資料庫中插入一條使

Java訊息佇列--ActiveMq筆記

1、下載安裝ActiveMQ     ActiveMQ官網下載地址:http://activemq.apache.org/download.html   ActiveMQ 提供了Windows 和Linux、Unix 等幾個版本,樓主這裡選擇了Linux 版本下進行開發。

訊息佇列ActiveMQ初步

安裝ActiveMQ 官網地址:http://activemq.apache.org/ 解壓後基本目錄結構: bin存放的是指令碼檔案 conf存放的是基本配置檔案 data存放的是日誌檔案 docs存放的是說明文件 examples存放的是簡單的例項

Java訊息佇列--ActiveMq 初體驗

1、下載安裝ActiveMQ   ActiveMQ 提供了Windows 和Linux、Unix 等幾個版本,樓主這裡選擇了Linux 版本下進行開發。   下載完安裝包,解壓之後的目錄:    從它的目錄來說,還是很簡單的:  bin

訊息佇列-ActiveMQ學習筆記(一)-JMS介紹與環境搭建

一、介紹JMS(來自於百度百科)        JMS即Java訊息服務(Java Message Service)應用程式介面,是一個Java平臺中關於面向訊息中介軟體(MOM)的API,用於在兩個

ActiveMq-Spring整合

  1,引入jar <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> &l

訊息佇列-ActiveMQ

1 業務需求描述 舉例描述: 再警情通報的業務時通過傳送訊息介面可以選擇 警情聯絡,和船情通報兩種訊息 傳送方式可分為 一對一發送:部門對部門、個人對個人 一對多傳送:部門對多部門、個人對多人 2 功能實現設計 基於上述需求描述,在訊息傳輸功能實現上選用activemq進行警情聯絡訊息傳輸功能

訊息佇列之kafka(整合flume)

補充:在flume的的lib中已經有了kafka的依賴包,所以直接使用flume的配置檔案即可。這裡舉出kafka+flume的典型場景:(Kafka-----sink) source :netcat channel:memory sink:kafka sink netcat-kafka.conf #別

訊息佇列ActiveMQ的使用

-----------------ActiveMQ----------------- 一、ActiveMQ核心概念1、ActiveMQ是訊息佇列技術,為解決高併發問題而生!2、ActiveMQ生產者消費者模型(生產者和消費者可以跨平臺、跨系統)有中間平臺3、ActiveMQ

Java訊息佇列--ActiveMq 實戰

https://www.cnblogs.com/jaycekon/p/6225058.htmlActiveMQ 提供了Windows 和Linux、Unix 等幾個版本,樓主這裡選擇了Linux 版本下進行開發從它的目錄來說,還是很簡單的: bin存放的是指令碼檔案conf存

java訊息佇列ActiveMQ的簡單使用

activeMQ 是學習java訊息佇列的實現專案,使用jfinal + jfinal-ext + activeMQ + quartz快速構建。 1.訊息佇列 訊息佇列,其實是一種基於資料結構實現的服務。而java語言中的實現,有apache的activeMQ,比較主流。

淘淘商城44-使用訊息佇列activeMQ更新solr索引庫--解決同步索引問題

目錄 3.注意 1.為什麼要使用訊息對列acitveMQ 在我們的後臺,增加、修改、刪除商品時,這裡以修改為例。 修改商品時,修改的是資料庫中的資料。但是使用者在商品搜尋時,搜尋的是solr索引庫中的資料,所

訊息佇列activeMQ的啟動和關閉(學習筆記之二)

1、activeMQ是一個使用java開發的訊息中介軟體2、在windows和linux解壓縮3、cd 到apache-activemq-5.11.1目錄下的bin目錄,執行activemq start和activemq stop即可4、預設埠為81615.客戶端表格的欄位含

訊息佇列-ActiveMQ的使用(Windows系統)

   2.下載完成後,解壓到本地目錄(我放在了D盤),我的電腦是Windows系統64位的,所以進入 D:\apache-activemq-5.15.2-bin\apache-activemq-5.15.2\bin\win64 的資料夾,找到activemq.bat,如

訊息佇列--ActiveMq(一) 下載安裝

windows: 在本地試一下,我的是jdk1.7 我下載了 apache-activemq-5.12.0 解壓目錄: bin 存放的是指令碼檔案 裡面分32 位 64 位,可以選擇啟動 conf 存放的是基本配置檔案(可以通過修改jetty

訊息佇列-ActiveMQ學習筆記(三)-釋出-訂閱訊息模式實現

釋出-訂閱訊息模式與點對點模式類似,只不過在session建立訊息佇列時,由session.createQuene()變為session.createTopic()。 訊息釋出者程式碼: package com.feiyang.activemq2; import java

訊息佇列activemq入門教程

關於web系統中佇列的使用參看文章http://jinnianshilongnian.iteye.com/blog/2321715 前言: 訊息佇列僅僅是佇列中的一個分支應用,使用場景:各個微服務之間的通訊,包括資料非同步同步等等場合,比如下訂單業務,可能涉及到使用者中心服

分散式訊息佇列ActiveMQ訊息模型(二)

在ActiveMQ中,一共支援4種訊息型別,分別是TextMessage訊息型別、BytesMessage訊息型別、ObjectMessage訊息型別,還有一種MapMessage訊息型別。 (1)       TextMessage訊息型別 TextMessage訊息是