消息隊列學習(二)

今天咱們以ActiveMQ爲例進行一系列的學習php

Apache ActiveMQApache軟件基金會所研發的開放源碼消息中間件;因爲ActiveMQ是一個純Java框架,那麼咱們先要了解下java中的JMS。java

JMS的全稱是Java Message Service,即Java消息服務。它主要用於在生產者和消費者之間進行消息傳遞,生產者負責產生消息,而消費者負責接收消息。把它應用到實際的業務需求中的話咱們能夠在特定的時候利用生產者生成一消息,並進行發送,對應的消費者在接收到對應的消息後去完成對應的業務邏輯。對於消息的傳遞有兩種類型,一種是點對點的,即一個生產者和一個消費者一一對應;另外一種是發佈/訂閱模式,即一個生產者產生消息並進行發送後,能夠由多個消費者進行接收。session

JMS基本構成

一、鏈接工廠

鏈接工廠是客戶用來建立鏈接的對象,例如 ActiveMQ 提供的
ActiveMQConnectionFactory。框架

二、 鏈接

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

三、會話

JMS Session 是生產和消費消息的一個單線程上下文。會話用於建立消息生
產者(producer)、消息消費者(consumer)和消息(message)等。會話提供
了一個事務性的上下文,在這個上下文中,一組發送和接收被組合到了一個原子
操做中。this

四、 目的地

目的地是客戶用來指定它生產的消息的目標和它消費的消息的來源的對象。
JMS1.0.2 規範中定義了兩種消息傳遞域:點對點(PTP)消息傳遞域和發佈/訂閱
消息傳遞域。線程

五、消息生產者

消息生產者是由會話建立的一個對象,用於把消息發送到一個目的地。code

六、消息消費者

消息消費者是由會話建立的一個對象,它用於接收發送到目的地的消息。中間件

七、消息

JMS 消息由如下三部分組成:
• 消息頭。每一個消息頭字段都有相應的 getter 和 setter 方法。
• 消息屬性。若是須要除消息頭字段之外的值,那麼可使用消息屬性。
• 消息體。JMS 定義的消息類型有 TextMessage、MapMessage、BytesMessage、
StreamMessage 和 ObjectMessage。對象

來看下具體代碼:

生產者
// 1.初始化connection工廠  
   ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
     ActiveMQConnection.DEFAULT_PASSWORD, BROKE_URL);
   // 2.建立Connection  
   connection = factory.createConnection();
   // 3.打開鏈接  
   connection.start();
   // 4.建立session  
   session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
   // 5.建立消息目的地  
   Destination destination = session.createQueue(DESTINATION);
   //6.建立生產者
   MessageProducer producer = session.createProducer(destination);
   //7.配置消息持久化
   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
   //8.發送消息
   sendMessage(session, producer);
   //9.事務提交
   session.commit();
消費者
           // 1.初始化connection工廠  
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();  
  
            // 2.建立Connection  
            connection = connectionFactory.createConnection();  
  
            // 3.打開鏈接  
            connection.start();  
  
            // 4.建立session  
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  
            // 5.建立消息目標  
            Destination destination = session.createTopic("YD");  
  
            //6.建立消費者  
            MessageConsumer consumer = session.createConsumer(destination);  
              
            //7.配置監聽  
            consumer.setMessageListener(this);  
相關文章
相關標籤/搜索