消息隊列入門(二)

今天我們以ActiveMQ為例進行一系列的學習

Apache ActiveMQApache軟件基金會所研發(fā)的開放源碼消息中間件;由于ActiveMQ是一個純Java框架,那么我們先要了解下java中的JMS。

JMS的全稱是Java Message Service,即Java消息服務(wù)。它主要用于在生產(chǎn)者和消費者之間進行消息傳遞,生產(chǎn)者負責產(chǎn)生消息,而消費者負責接收消息。把它應用到實際的業(yè)務(wù)需求中的話我們可以在特定的時候利用生產(chǎn)者生成一消息,并進行發(fā)送,對應的消費者在接收到對應的消息后去完成對應的業(yè)務(wù)邏輯。對于消息的傳遞有兩種類型,一種是點對點的,即一個生產(chǎn)者和一個消費者一一對應;另一種是發(fā)布/訂閱模式,即一個生產(chǎn)者產(chǎn)生消息并進行發(fā)送后,可以由多個消費者進行接收。

JMS基本構(gòu)成

1、連接工廠

連接工廠是客戶用來創(chuàng)建連接的對象,例如 ActiveMQ 提供的
ActiveMQConnectionFactory。

2、 連接

JMS Connection 封裝了客戶與 JMS 提供者之間的一個虛擬的連接。

3、會話

JMS Session 是生產(chǎn)和消費消息的一個單線程上下文。會話用于創(chuàng)建消息生
產(chǎn)者(producer)、消息消費者(consumer)和消息(message)等。會話提供
了一個事務(wù)性的上下文,在這個上下文中,一組發(fā)送和接收被組合到了一個原子
操作中。

4、 目的地

目的地是客戶用來指定它生產(chǎn)的消息的目標和它消費的消息的來源的對象。
JMS1.0.2 規(guī)范中定義了兩種消息傳遞域:點對點(PTP)消息傳遞域和發(fā)布/訂閱
消息傳遞域。

5、消息生產(chǎn)者

消息生產(chǎn)者是由會話創(chuàng)建的一個對象,用于把消息發(fā)送到一個目的地。

6、消息消費者

消息消費者是由會話創(chuàng)建的一個對象,它用于接收發(fā)送到目的地的消息。

7、消息

JMS 消息由以下三部分組成:
? 消息頭。每個消息頭字段都有相應的 getter 和 setter 方法。
? 消息屬性。如果需要除消息頭字段以外的值,那么可以使用消息屬性。
? 消息體。JMS 定義的消息類型有 TextMessage、MapMessage、BytesMessage、
StreamMessage 和 ObjectMessage。

來看下具體代碼:

生產(chǎn)者
  // 1.初始化connection工廠  
   ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
     ActiveMQConnection.DEFAULT_PASSWORD, BROKE_URL);
   // 2.創(chuàng)建Connection  
   connection = factory.createConnection();
   // 3.打開連接  
   connection.start();
   // 4.創(chuàng)建session  
   session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
   // 5.創(chuàng)建消息目的地  
   Destination destination = session.createQueue(DESTINATION);
   //6.創(chuàng)建生產(chǎn)者
   MessageProducer producer = session.createProducer(destination);
   //7.配置消息持久化
   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
   //8.發(fā)送消息
   sendMessage(session, producer);
   //9.事務(wù)提交
   session.commit();
消費者
           // 1.初始化connection工廠  
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();  
  
            // 2.創(chuàng)建Connection  
            connection = connectionFactory.createConnection();  
  
            // 3.打開連接  
            connection.start();  
  
            // 4.創(chuàng)建session  
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  
            // 5.創(chuàng)建消息目標  
            Destination destination = session.createTopic("YD");  
  
            //6.創(chuàng)建消費者  
            MessageConsumer consumer = session.createConsumer(destination);  
              
            //7.配置監(jiān)聽  
            consumer.setMessageListener(this);  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、前言 之前我們通過兩篇文章(架構(gòu)設(shè)計:系統(tǒng)間通信(19)——MQ:消息協(xié)議(上)、架構(gòu)設(shè)計:系統(tǒng)間通信(20)...
    境里婆娑閱讀 1,987評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評論 19 139
  • ActiveMQ 即時通訊服務(wù) 淺析http://www.cnblogs.com/hoojo/p/active_m...
    bboymonk閱讀 1,589評論 0 11
  • 一、 消息隊列概述 消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決應用耦合、異步消息、流量削鋒等問題。實現(xiàn)高性能...
    步積閱讀 57,458評論 10 138
  • 1 消息隊列概述 消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決應用耦合,異步消息,流量削鋒等問題。實現(xiàn)高性能,...
    Bobby0322閱讀 11,061評論 0 24

友情鏈接更多精彩內(nèi)容