ActiveMQ初級教程
MQ的思想其實和連線池差不多,只不過一個是佇列,一個是多執行緒。設計模式和原理都類似,ActiveMQ(以下簡稱amq)實際上是封裝了JMS,所以可以在amq裡直接使用很多JMS的物件。
去官網去下載 關於amq的安裝 so easy 我就不多說了 網上一搜一堆 需要注意的是下載的時候可能會有各種404問題 官網提供了很多的下載URL 國內的網路河蟹 很難下載 你可以換一個其他版本試試 (我就是這樣的)
JMS裡分為生產者(Producer)和消費者(Consumer)
生產者向佇列add data
消費者向佇列poll data
我來簡單介紹幾個MQ重要的物件
ActiveMQConnectionFactory : 實現了jms的ConnectionFactory,Connection的工廠類
Connection :JMS連線,和Java連線池的Connection差不多 Producer和Consumer用來和Broker通訊的
Session : 會話
Destination :目的地,資料要傳送到哪裡或者從哪裡取
MessageProducer: 生產者
MessageConsumer :消費者
Message : 訊息,add到佇列的東西,也就是自己要處理的東西,Message有很多子介面,TextMessage或ByteMessage神馬的 自己根據自己的業務選擇介面
以上除了ActiveMQConnectionFactory 是amq的類(實現JMS) 其他的基本都是JMS自己的介面 所以我們在程式碼裡直接使用的介面 因為除了ActiveMQConnectionFactory需要我們建立 其他的物件都不需要我們手動去建立
Producer
Consumer 下面就不寫註釋了 和上面一樣
有幾個地方要注意一下
1、ConnectionFactory的生命週期 此物件不要頻繁建立 全域性建立一個就好 每次用該物件獲取Connection就好了
1、DeliveryMode 持久化方式,開發中可以選擇對Message是否要做持久化,持久化的Message在重啟amq後還會依然存在,非持久化會自動被幹掉(但是會臨時存放於amp),
其值為NON_PERSISTENT非持久化 ,PERSISTENT持久化
2、ACK(Acknowledgement),先說下什麼是ACK,ACK即確認字元,在資料通訊中,接收站發給傳送站的一種傳輸類控制字元。表示發來的資料已確認接受無誤。ACK訊號通常是一個ASCII字元,不同的協議中ACK訊號都不一樣。
當Consumer拿到Message之後要通知Broker已確認接收,否則其他Consumer會認為該Message依然可用,JMS的Session中提供了四種ACK_MODE
AUTO_ACKNOWLEDGE = 1 自動確認
CLIENT_ACKNOWLEDGE = 2 客戶端手動確認
DUPS_OK_ACKNOWLEDGE = 3 自動批量確認
SESSION_TRANSACTED = 0 事務提交併確認
AcitveMQ對此補充了一個自定義的ACK_MODE: INDIVIDUAL_ACKNOWLEDGE = 4 單條訊息確認
去官網去下載 關於amq的安裝 so easy 我就不多說了 網上一搜一堆 需要注意的是下載的時候可能會有各種404問題 官網提供了很多的下載URL 國內的網路河蟹 很難下載 你可以換一個其他版本試試 (我就是這樣的)
JMS裡分為生產者(Producer)和消費者(Consumer)
生產者向佇列add data
消費者向佇列poll data
我來簡單介紹幾個MQ重要的物件
ActiveMQConnectionFactory : 實現了jms的ConnectionFactory,Connection的工廠類
Connection :JMS連線,和Java連線池的Connection差不多 Producer和Consumer用來和Broker通訊的
Session : 會話
Destination :目的地,資料要傳送到哪裡或者從哪裡取
MessageProducer: 生產者
MessageConsumer :消費者
Message : 訊息,add到佇列的東西,也就是自己要處理的東西,Message有很多子介面,TextMessage或ByteMessage神馬的 自己根據自己的業務選擇介面
以上除了ActiveMQConnectionFactory 是amq的類(實現JMS) 其他的基本都是JMS自己的介面 所以我們在程式碼裡直接使用的介面 因為除了ActiveMQConnectionFactory需要我們建立 其他的物件都不需要我們手動去建立
Producer
ConnectionFactory factory; //連線工廠
Connection connection;//jms連線
Session session;//傳送、接收執行緒
Destination destination;//訊息目的地
MessageProducer producer;//訊息傳送者
factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616"); //獲取工廠例項
/**
* 以上步驟可使用單例模式等方法,讓ActiveMQConnectionFactory始終只建立一次(和SessionFactory的性質差不多)
*/
try {
connection = factory.createConnection(); //獲取Connection
connection.start(); //開啟Connection
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); //建立Session並選擇事務和ACK模式
destination = session.createQueue("rdp_import_queue"); //根據自己的佇列名稱建立Destination(如果沒有佇列,MQ會自己建立佇列)
producer = session.createProducer(destination); //建立生產者
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //是否為持久化 ,NON_PERSISTENT非持久化 ,PERSISTENT持久化
for (int i = 1; i < 13; i++) {
String msg = "第" + i + "次傳送訊息";
TextMessage textMessage = session.createTextMessage(msg);
producer.send(textMessage);
}
//關閉物件
producer.close();
session.commit();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
Consumer 下面就不寫註釋了 和上面一樣
connection = factory.createConnection();
connection.start();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("rdp_import_queue");
consumer = session.createConsumer(destination); // 建立Consumer
while (true) {
TextMessage textMessage = (TextMessage) consumer.receive(); // 接收Message
if (textMessage != null && !textMessage.getJMSRedelivered()) { //檢查是否已經接收過
System.out.println(textMessage.getText());
textMessage.acknowledge(); //通知已接收
}
Thread.sleep(1000);
}
有幾個地方要注意一下
1、ConnectionFactory的生命週期 此物件不要頻繁建立 全域性建立一個就好 每次用該物件獲取Connection就好了
1、DeliveryMode 持久化方式,開發中可以選擇對Message是否要做持久化,持久化的Message在重啟amq後還會依然存在,非持久化會自動被幹掉(但是會臨時存放於amp),
其值為NON_PERSISTENT非持久化 ,PERSISTENT持久化
2、ACK(Acknowledgement),先說下什麼是ACK,ACK即確認字元,在資料通訊中,接收站發給傳送站的一種傳輸類控制字元。表示發來的資料已確認接受無誤。ACK訊號通常是一個ASCII字元,不同的協議中ACK訊號都不一樣。
當Consumer拿到Message之後要通知Broker已確認接收,否則其他Consumer會認為該Message依然可用,JMS的Session中提供了四種ACK_MODE
AUTO_ACKNOWLEDGE = 1 自動確認
CLIENT_ACKNOWLEDGE = 2 客戶端手動確認
DUPS_OK_ACKNOWLEDGE = 3 自動批量確認
SESSION_TRANSACTED = 0 事務提交併確認
AcitveMQ對此補充了一個自定義的ACK_MODE: INDIVIDUAL_ACKNOWLEDGE = 4 單條訊息確認
相關文章
- activemq升級報錯MQ
- yii2 開發 API 初級教程API
- COBOL語言初級教程(2)--COBOL程式
- Direct3D9初級教程 (轉)3D
- Python影象處理庫:Pillow 初級教程Python
- Python影像處理庫:Pillow 初級教程Python
- COBOL語言初級教程(1)--COBOL簡介
- VB初級教程(第一章) (轉)
- JasperReport初級教程(2.0.3)圖文詳解
- 初級~~初級~~~初初級~~~KanjiWeb 3.0 (漢字通)破解~~~~~~~~~ (8千字)Web
- 最適合入門的 Laravel 初級教程 (一)Laravel
- 最適合入門的 Laravel 初級教程 (二)Laravel
- COBOL語言初級教程(1)--COBOL簡介(續)
- 運維初級實踐——Linux系統命令教程運維Linux
- IOS 初級開發入門教程(一)介紹篇iOS
- 《熬夜整理》保姆級系列教程-玩轉Wireshark抓包神器教程(1)-初識Wireshark
- 安卓初級開發教程 ppt+視訊+案例原始碼安卓原始碼
- Oracle PL/SQL語言初級教程之異常處理OracleSQL
- 初學者Mybatis的初級使用MyBatis
- ActiveMQMQ
- 大資料教程系列之Kafka和activemq對比大資料KafkaMQ
- 寫給後端的Hadoop初級入門教程:概念篇後端Hadoop
- 寫給後端的Nginx初級入門教程:Nginx原理初探後端Nginx
- 寫給後端的Nginx初級入門教程:基礎篇後端Nginx
- .NET輕量級MVC框架:Nancy入門教程(一)——初識NancyMVC框架NaN
- npm 初學者教程NPM
- Principle 高請視訊教程入門初級試學視訊教程免費下載
- [譯] 用 Python 實現馬爾可夫鏈的初級教程Python馬爾可夫
- 2019 壓題會計初級職稱考試教程
- LINUX初級命令Linux
- 初級演算法演算法
- grafana初級入門Grafana
- Sprite Kit教程:初學者
- 寫給後端的Nginx初級入門教程:配置高可用叢集後端Nginx
- ActiveMQ入門MQ
- 安裝activemqMQ
- ActiveMQ簡介MQ
- PHP 初級 試崗要求PHP