Java消息隊列--ActiveMq 實戰
阿新 • • 發佈:2018-02-27
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 服務端:http://127.0.0.1:8161/admin/ 裏面的Queues 中查看我們生產的消息。
5、ActiveMQ的特性
5.1 ActiveMq 的特性
- 多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
- 完全支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務)
- 對Spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統裏面去,而且也支持Spring2.0的特性
- 通過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上
- 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
- 支持通過JDBC和journal提供高速的消息持久化
- 從設計上保證了高性能的集群,客戶端-服務器,點對點
- 支持Ajax
- 支持與Axis的整合
- 可以很容易得調用內嵌JMS provider,進行測試
5.2 什麽情況下使用ActiveMQ?
- 多個項目之間集成
(1) 跨平臺
(2) 多語言
(3) 多項目 - 降低系統間模塊的耦合度,解耦
(1) 軟件擴展性 - 系統前後端隔離
(1) 前後端隔離,屏蔽高安全區
Java消息隊列--ActiveMq 實戰