ActiveMQ學習 第一篇 入門篇

ActiveMQ 學習一 入門篇

實際應用中有多種MQ,包括MSMQ,Active MQ,Jboss MQ。其中ActiveMQ是一個開源的JMS服務器,本文簡單介紹java環境下Active MQ入門。

準備工作

1、下載ActiveMQ

http://pan.baidu.com/s/1c1qwlJq 我下載的是apache-activemq-5.13.2,下載後解壓縮即可。

2、啓動ActiveMQ

bin目錄下,找到activemq.bat命令,雙擊啓動即可。其中需要注意的是,如果是64位機器,需要啓動win64文件夾下的activemq.bat命令。


3、測試是否啓動成功

在瀏覽器輸入http://localhost:8161/admin 用戶名/密碼:admin/admin

這些都是默認配置,都可以在conf文件夾中進行配置。我們先用默認的進行測試就行了


4、簡單java測試項目

/**

  * 消息產生者向JMS發送消息的步驟 

(1)創建連接使用的工廠類JMS ConnectionFactory 

(2)使用管理對象JMS ConnectionFactory建立連接Connection 

(3)使用連接Connection 建立會話Session 

(4)使用會話Session和管理對象Destination創建消息生產者MessageSender 

(5)使用消息生產者MessageSender發送消息 

  * @throws JMSException

  */

public class SendMessage {

 protected String expectedBody = "<hello>world!</hello>"

 public void sendMessage() throws JMSException{

 

 //ConnectionFactory:連接工廠,JMS用它創建連接

 ConnectionFactory connectionFactory = null;

 //Connection:JMS客戶端到JMS Provider的連接

 Connection connection =null;  

 //Session:一個發送或接收信息的線程

 Session session = null;

 //Destination:消息的目的地,消息發送給誰

 Destination destination = null;

 //MessageProducer:消息發送者

 MessageProducer producer = null;

 

  try{

   connectionFactory =new ActiveMQConnectionFactory(

   ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,Constants.URL);  

   connection = (Connection)connectionFactory.createConnection();  

   connection.start();  

   session = (Session)connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);  

   destination = session.createQueue(Constants.QUEUE_NAME);  

   producer = session.createProducer(destination);  

   //設置不持久化,此處可根據實際項目決定

   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

   //TextMessage:消息體

//   TextMessage message = session.createTextMessage(expectedBody);  

//   message.setStringProperty("headname", "remoteB");  

//   producer.send(message);    

   sendMessage(session,producer);

   session.commit();

   

  }catch(Exception e){  

   e.printStackTrace();  

  }finally{

  if(null!=connection){

  connection.close();

  }

  }  

  

 }  

   

 private static void sendMessage(Session session, MessageProducer producerthrows JMSException {

for(int i=1;i<=Constants.SEND_NUMBER;i++){

TextMessage message = session.createTextMessage("ActiveMq發送的消息"+i);

producer.send(message);

}

}

 

public static void main(String[] args){  

  SendMessage sndMsg = new SendMessage();  

  try{  

   sndMsg.sendMessage();  

  }catch(Exception ex){  

   System.out.println(ex.toString());  

  }  

 }  

}

 

 /**

  * 消息消費者從JMS接受消息的步驟 

(1)創建連接使用的工廠類JMS ConnectionFactory 

(2)使用管理對象JMS ConnectionFactory建立連接Connection 

(3)使用連接Connection 建立會話Session 

(4)使用會話Session和管理對象Destination創建消息消費者MessageReceiver 

(5)使用消息消費者MessageReceiver接受消息,需要用setMessageListener將MessageListener接口綁定到MessageReceiver 

消息消費者必須實現了MessageListener接口,需要定義onMessage事件方法。 

  */

 

public class ReceiveMessage {

public void receiveMessage() {

 //JMS用它創建連接

 ConnectionFactory connectionFactory = null;

 //JMS客戶端到JMS Provider的連接

 Connection connection = null;

 //一個發送或接收消息的線程

 Session session = null;

 //消息目的地

 Destination destination = null;

 //消費者,消息接收者

 MessageConsumer consumer;

 

 try {  

   connectionFactory = new ActiveMQConnectionFactory(

   ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,Constants.URL);  

   connection = connectionFactory.createConnection();  

   connection.start();  

   /**在connection的基礎上創建一個session,同時設置是否支持事務ACKNOWLEDGE標識。 

   • AUTO_ACKNOWLEDGE:自動確認模式。一旦接收方應用程序的方法調用從處理消息處返回,會話對象就會確認消息的接收。  

   • CLIENT_ACKNOWLEDGE:客戶端確認模式。會話對象依賴於應用程序對被接收的消息調用一個acknowledge()方法。一旦這個方法被調用,會話會確認最後一次確認之後所有接收到的消息。這種模式允許應用程序以一個調用來接收,處理並確認一批消息。注意:在管理控制檯中,如果連接工廠的Acknowledge Policy(確認方針)屬性被設置爲"Previous"(提前),但是你希望爲一個給定的會話確認所有接收到的消息,那麼就用最後一條消息來調用acknowledge()方法。  

   • DUPS_OK_ACKNOWLEDGE:允許副本的確認模式。一旦接收方應用程序的方法調用從處理消息處返回,會話對象就會確認消息的接收;而且允許重複確認。在需要考慮資源使用時,這種模式非常有效。注意:如果你的應用程序無法處理重複的消息的話,你應該避免使用這種模式。如果發送消息的初始化嘗試失敗,那麼重複的消息可以被重新發送。 

   •  SESSION_TRANSACTED

   **/

   session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);  

   destination = session.createQueue(Constants.QUEUE_NAME);  

   consumer = session.createConsumer(destination);  

   consumeMessagesAndClose(connectionsessionconsumer);  

   } catch (Exception e) {  

   e.printStackTrace();

       System.out.println(e.toString());  

   }

 }  

  

 protected void consumeMessagesAndClose(Connection connection,Session session, MessageConsumer consumer)  

 throws JMSException {  

  for (int i = 0; i <=Constants.SEND_NUMBER;i++) {  

   Message message = consumer.receive(1000);  

   if (message != null) {  

    i++;  

    onMessage(message);  

   }  

  }  

  System.out.println("Closing connection");  

  consumer.close();  

  session.close();  

  connection.close();  

 }  

  

 public void onMessage(Message message) {  

  try {  

   if (message instanceof TextMessage) {  

    TextMessage txtMsg = (TextMessage) message;  

    String msg = txtMsg.getText();  

    System.out.println("Received: " + msg);  

   }  

  } catch (Exception e) {  

   e.printStackTrace();  

  }  

  

 }  

  

 public static void main(String args[]) {  

  ReceiveMessage rm = new ReceiveMessage();  

  rm.receiveMessage();  

 }  

}

 

 

public class Constants {

public static final String URL = "tcp://localhost:61616";  

public static final String QUEUE_NAME = "choice.queue";  

public static int SEND_NUMBER = 5;

}

Jar包管理:

a.可以引入maven依賴

<!-- activeMQ -->

<dependency>

<groupId>org.apache.activemq</groupId>

<artifactId>activemq-all</artifactId>

<version>5.13.2</version>

</dependency>

  b.導入 activemq-all-5.13.2.jar      

5運行項目

首先,運行SendMessagemain主函數,沒有錯誤後,刷新主頁面,可以看到隊列choice.queue中有5條消息。


第二,運行ReceiveMessageMain主函數,效果如下圖:

 

第三,刷新主頁面,可以看到隊列中爲讀消息變成2條:

 

 

後記:簡單的activeMQ入門篇就到這裏啦,下期第二篇開講springmvc集成activeMQ敬請關注。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章