ActiveMQ消息隊列的配置和使用操作

每個人的人生裏都會遇見一場措手不及的大雨
若你身陷雨中
願有人爲你撐傘
如果沒有
也願你有聽雨的心情

ActiveMQ消息隊列在SSM項目開發中的具體詳細使用,本次演示的是在SSM架構中使用消息隊列ActiveMQ

1,消息中間件

百度百科解釋:
消息中間件利用高效可靠的消息傳遞機制進行平臺無關的數據交流,並基於數據通信來進行分佈式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分佈式環境下擴展進程間的通信。
關鍵點:關注於數據的發送和接受,利用高效可靠的異步消息機制傳遞機制集成分佈式系統。
在這裏插入圖片描述
在這裏插入圖片描述

2,ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演着特殊的地位。
主要特點:

  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,進行測試

3,ActiveMQ的消息形式

對於消息的傳遞有兩種類型:
一種是點對點的,即一個生產者和一個消費者一一對應;
另一種是發佈/訂閱模式,即一個生產者產生消息並進行發送後,可以由多個消費者進行接收。
JMS定義了五種不同的消息正文格式,以及調用的消息類型,允許你發送並接收以一些不同形式的數據,提供現有消息格式的一些級別的兼容性。
  · StreamMessage – Java原始值的數據流
  · MapMessage–一套名稱-值對
  · TextMessage–一個字符串對象
  · ObjectMessage–一個序列化的 Java對象
  · BytesMessage–一個字節的數據流

4,ActiveMQ的安裝

4.1,官網下載linux版本的,第2個

進入http://activemq.apache.org/下載ActiveMQ
在這裏插入圖片描述

4.2,安裝環境

1、需要jdk
2、安裝Linux系統。生產環境都是Linux系統。

4.3,安裝步驟(這邊我使用的是雲服務器,和linux同操作)

第一步: 把ActiveMQ 的壓縮包上傳到Linux系統。
在這裏插入圖片描述
第二步:解壓縮。
在這裏插入圖片描述
第三步:啓動。
在這裏插入圖片描述

使用bin目錄下的activemq命令啓動:
[root@localhost bin]# ./activemq start
關閉:
[root@localhost bin]# ./activemq stop
查看狀態:
[root@localhost bin]# ./activemq status

第四步:進入管理後臺:
http://111.111.111.111:8161/admin
用戶名:admin
密碼:admin
在這裏插入圖片描述
啓動成功
這邊說明一個問題:
active裏面的jar包的使用注意事項:
在這裏插入圖片描述
如果單純的使用active消息隊列,那就把這個jar包導入你的項目中進行使用,如果是在spring容器中使用消息隊列,就不要導入,因爲這個包裏面封裝了一些和spring相同名稱的類,會混淆spring開發,報錯還找不到哪裏出錯了,這個時候就要使用版本5.11.2,這個5.11.2版本沒有包含spring同名方法,推薦使用!需要請留言。
解決405問題,
修改host文件,配置機器名和127.0.0.1的映射關係
機器名:/etc/sysconfig/network文件中定義了機器名
然後重新啓動activeMQ服務

5,ActiveMQ的使用方法

在這裏插入圖片描述

5.1,Queue

點對點(point-to-point,簡稱PTP)Queue消息傳遞模型:
生產者:生產消息,發送端。
把jar包添加到工程中。使用5.11.2版本的jar包。

	@Test
	public void testQueueProduce() throws Exception{
		//創建一個連接工廠對象,需要指定服務的ip和端口
		ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://119.23.43.244:61616");
		//根據生產對象創建一個connection對象
		Connection createConnection = connectionFactory.createConnection();
		//開啓連接,使用start開啓
		createConnection.start();
		/*
		 * 創建一個session對象,第一個參數是是否開啓事務,開啓則第二個參數將無意義,默認不開啓
		 * 第二個參數是應答模式,常用2種,自動和手動,建議默認自動
		 */
		javax.jms.Session createSession = createConnection.createSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
		//使用session對象創建一個Destination對象,2種形式queue,topic
		Queue createQueue = createSession.createQueue("test-queue");//本次連接傳輸數據的name
		//使用session對象創建一個producer對象
		MessageProducer createProducer = createSession.createProducer(createQueue);
		//創建一個message對象,可以使用Testmessage
		TextMessage createTextMessage = createSession.createTextMessage("hello activeMQ");
		createProducer.send(createTextMessage);
		//關閉資源
		createProducer.close();
		createSession.close();
		createConnection.close();
	}

在這裏插入圖片描述
消費者:接收消息。

@Test
public void testActiveMQConsumer() throws Exception{
	//創建連接工廠對象
	ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://119.23.43.244:61616");
	//創建連接
	Connection createConnection = connectionFactory.createConnection();
	//開啓連接
	createConnection.start();
	//創建session
	javax.jms.Session createSession = createConnection.createSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);		
	//創建一個Destination對象
	Queue createQueue = createSession.createQueue("test-queue");
	//創建消費者
	MessageConsumer createConsumer = createSession.createConsumer(createQueue );
	//接受消息
	createConsumer.setMessageListener(new MessageListener() {
		@Override
		public void onMessage(Message message) {
			TextMessage textMessage=(TextMessage) message;
			String text;
			try {
				text=textMessage.getText();
				System.out.println(text);
			} catch (JMSException e) {
			}
		}
	});
	//等待接受消息
	System.in.read();
	//關閉資源
	createConsumer.close();
	createSession.close();
	createConnection.close();
}

在這裏插入圖片描述
消息接收完畢之後ActiveMQ就清除了等待接受的消息
在這裏插入圖片描述

5.2,Topic

發佈/訂閱(publish/subscribe,簡稱pub/sub)Topic消息傳遞模型:
生產者和消費者的邏輯和Queue差不多,只有創建Destination對象需要改變

//使用session對象創建一個Destination對象,2種形式queue,topic
Topic createTopic = createSession.createTopic("test-topic");//本次連接傳輸數據的name
//使用session對象創建一個producer對象
MessageProducer createProducer = createSession.createProducer(createTopic);

5.3,Queue和Topic的區別

1:
queue生產者發送消息後會把消息存到ActiveMQ服務器中,等待消費者接收。
Topic生產者發送消息後ActiveMQ如果沒有消費者正在接收,會清除當前發送的消息,不會存到服務端存儲。(Topic也可以實現持久化,配置持久化客戶機到服務器即可,具體可查資料)

2:
Queue模式只允許一個消費者進行接收,默認選擇最先開啓的消費者進行接收。
Topic模式允許多個消費者進行接收,當生產者把消息發送到activeMQ的時候,當前等待接受的消費者有幾個,就把當前消息分別發送給他們。
在這裏插入圖片描述

文章持續更新,可以微信搜索「 紳堂Style 」第一時間閱讀,回覆【資料】有我準備的面試題筆記。
GitHub https://github.com/dtt11111/Nodes 有總結面試完整考點、資料以及我的系列文章。歡迎Star。
在這裏插入圖片描述

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