1. 程式人生 > >Java消息隊列--ActiveMq 實戰

Java消息隊列--ActiveMq 實戰

int tex throwable ada vid 數值 nim down public

1、下載安裝ActiveMQ


ActiveMQ官網下載地址:http://activemq.apache.org/download.html

  ActiveMQ 提供了Windows 和Linux、Unix 等幾個版本,樓主這裏選擇了Windows 版本下進行開發。

技術分享圖片技術分享圖片

下載完安裝包,解壓之後的目錄:

技術分享圖片

  從它的目錄來說,還是很簡單的:

    • bin存放的是腳本文件
    • conf存放的是基本配置文件
    • data存放的是日誌文件
    • docs存放的是說明文檔
    • examples存放的是簡單的實例
    • lib存放的是activemq所需jar包
    • webapps用於存放項目的目錄

2、啟動ActiveMQ 


  進入到ActiveMQ 安裝目錄的bin 目錄,根據系統選擇win32/win64,然後點擊activemq.bat

  點擊之後,出現ActiveMQ已啟動,這時候說明服務已經成功啟動了,此時也能看到訪問路徑

  技術分享圖片

  ActiveMQ默認啟動時,啟動了內置的jetty服務器,提供一個用於監控ActiveMQ的admin應用。
  admin:http://127.0.0.1:8161/admin/

  我們在瀏覽器打開鏈接之後輸入賬號密碼(這裏和tomcat 服務器類似)

  默認賬號:admin

  密碼:admin

  技術分享圖片

   到這裏為止,ActiveMQ 服務端就啟動完畢了。

3、創建一個ActiveMQ工程


  項目目錄結構:

  技術分享圖片

  上述在官網下載ActiveMq 的時候,我們可以在目錄下看到一個jar包:

  技術分享圖片

  這個jar 包就是我們需要在項目中進行開發中使用到的相關依賴。

  3.1 創建生產者

public class Sender {

private static final int SEND_NUMBER = 5;

private static final String QUEUE_NAME = "xwj_queue";

public static void main(String[] args) {
// ConnectionFactory :連接工廠,JMS 用它創建連接
ConnectionFactory connectionFactory;
// Connection :JMS 客戶端到JMS Provider 的連接
Connection connection = null;
// Session: 一個發送或接收消息的線程
Session session;
// Destination :消息的目的地;消息發送給誰.
Destination destination;
// MessageProducer:消息發送者
MessageProducer producer;
// TextMessage message;
// 構造ConnectionFactory實例對象,此處采用ActiveMq的實現jar
connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
try {
// 構造從工廠得到連接對象
connection = connectionFactory.createConnection();
// 啟動
connection.start();
// 獲取操作連接
session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
// 獲取session註意參數值QUEUE_NAME是一個服務器的queue,須在在ActiveMq的console配置
destination = session.createQueue(QUEUE_NAME);
// 得到消息生成者【發送者】
producer = session.createProducer(destination);
// 設置不持久化,此處學習,實際根據項目決定
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 構造消息,此處寫死,項目就是參數,或者方法獲取
sendMessage(session, producer);
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}

public
static void sendMessage(Session session, MessageProducer producer) throws Exception {
for (int i = 1; i <= SEND_NUMBER; i++) {
TextMessage message = session.createTextMessage("xwj發送消息:" + i);
// 發送消息到目的地方
System.out.println("發送消息:" + "ActiveMq 發送的消息" + i);
producer.send(message);
}
}

    

  3.2 創建消費者

技術分享圖片
public class Receiver {

private static final String QUEUE_NAME = "xwj_queue";

public static void main(String[] args) {
// ConnectionFactory :連接工廠,JMS 用它創建連接
ConnectionFactory connectionFactory;
// Connection :JMS 客戶端到JMS Provider 的連接
Connection connection = null;
// Session: 一個發送或接收消息的線程
Session session;
// Destination :消息的目的地;消息發送給誰.
Destination destination;
// 消費者,消息接收者
MessageConsumer consumer;
connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
try {
// 構造從工廠得到連接對象
connection = connectionFactory.createConnection();
// 啟動
connection.start();
// 獲取操作連接
session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
// 獲取session註意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置
destination = session.createQueue(QUEUE_NAME);
consumer = session.createConsumer(destination);
while (true) {
// 設置接收者接收消息的時間,為了便於測試,這裏誰定為100s
TextMessage message = (TextMessage) consumer.receive(10000);
if (null != message) {
System.out.println("收到消息" + message.getText());
} else {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}
技術分享圖片

4、運行ActiveMQ項目


  4.1 生產者開始生產消息

執行Sender中的主方法,運行結果:

技術分享圖片
發送消息:ActiveMq 發送的消息1
發送消息:ActiveMq 發送的消息2
發送消息:ActiveMq 發送的消息3
發送消息:ActiveMq 發送的消息4
發送消息:ActiveMq 發送的消息5
技術分享圖片

  技術分享圖片

  4.2 消費者開始消費消息

  執行Receiver中的主方法,運行結果:

技術分享圖片
發送消息:ActiveMq 發送的消息1
發送消息:ActiveMq 發送的消息2
發送消息:ActiveMq 發送的消息3
發送消息:ActiveMq 發送的消息4
發送消息:ActiveMq 發送的消息5
技術分享圖片

  查看運行結果,我們可以做ActiveMQ 服務端:http://127.0.0.1:8161/admin/ 裏面的Queues 中查看我們生產的消息。

技術分享圖片

5、ActiveMQ的特性


 5.1 ActiveMq 的特性 

  1. 多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
  2. 完全支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務)
  3. 對Spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統裏面去,而且也支持Spring2.0的特性
  4. 通過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上
  5. 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  6. 支持通過JDBC和journal提供高速的消息持久化
  7. 從設計上保證了高性能的集群,客戶端-服務器,點對點
  8. 支持Ajax
  9. 支持與Axis的整合
  10. 可以很容易得調用內嵌JMS provider,進行測試

 

 5.2 什麽情況下使用ActiveMQ?

    1. 多個項目之間集成
      (1) 跨平臺
      (2) 多語言
      (3) 多項目
    2. 降低系統間模塊的耦合度,解耦
      (1) 軟件擴展性
    3. 系統前後端隔離
      (1) 前後端隔離,屏蔽高安全區

Java消息隊列--ActiveMq 實戰