1. 程式人生 > >ActiveMQ基本使用

ActiveMQ基本使用

同步索引庫分析:

方案一:在shop-manager中,新增商品的業務邏輯中,新增一個同步索引庫的業務邏輯。

缺點:業務邏輯耦合度高,業務拆分不明確

方案二:業務邏輯在shop-search中實現,呼叫服務在shop-manager實現。業務邏輯分開。

缺點:服務之間的耦合度變高。服務的啟動有先後順序。

方案三:使用訊息佇列。MQ是一個訊息中介軟體。


MQ是一個訊息中介軟體,ActiveMQ、RabbitMQ、kafka。

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

ActiveMQ的訊息形式:

對於訊息的傳遞有兩種型別:
一種是點對點的,即一個生產者和一個消費者一一對應;
另一種是釋出/訂閱模式,即一個生產者產生訊息並進行傳送後,可以由多個消費者進行接收。
JMS定義了五種不同的訊息正文格式,以及呼叫的訊息型別,允許你傳送並接收以一些不同形式的資料,提供現有訊息格式的一些級別的相容性。
  •   · StreamMessage -- Java原始值的資料流
  •   · MapMessage--一套名稱-值對
  •   · TextMessage--一個字串物件
  •   · ObjectMessage--一個序列化的 Java物件
  •   · BytesMessage--一個位元組的資料流

ActiveMQ的安裝:

安裝環境:
1、需要jdk
2、安裝Linux系統。生產環境都是Linux系統。
安裝步驟:
第一步: 把ActiveMQ 的壓縮包上傳到Linux系統。
第二步:解壓縮。
第三步:啟動。
使用bin目錄下的activemq命令啟動:

[[email protected] bin]# ./activemq start
關閉:
[[email protected] bin]# ./activemq stop
檢視狀態:
[[email protected] bin]# ./activemq status
注意:如果ActiveMQ整合spring使用不要使用activemq-all-5.12.0.jar包。建議使用5.11.2


解決405問題:

修改hosts檔案,配置機器名和127.0.0.1的對映關係。機器名:/etc/sysconfig/network檔案中定義了機器名:


Host檔案的配置(/stc/hosts):


重新啟動Activemq的服務。

ActiveMQ的使用方法:


Queue:

Producer:

生產者:生產訊息,傳送端。
把jar包新增到shop-manager-service工程中。使用5.11.2版本的jar包。
<dependency>
	<groupId>org.apache.activemq</groupId>
	<artifactId>activemq-all</artifactId>
</dependency>
第一步:建立ConnectionFactory物件,需要指定服務端ip及埠號。
第二步:使用ConnectionFactory物件建立一個Connection物件。
第三步:開啟連線,呼叫Connection物件的start方法。
第四步:使用Connection物件建立一個Session物件。
第五步:使用Session物件建立一個Destination物件(topic、queue),此處建立一個Queue物件。
第六步:使用Session物件建立一個Producer物件。
第七步:建立一個Message物件,建立一個TextMessage物件。
第八步:使用Producer物件傳送訊息。
第九步:關閉資源。
/**
	 * 點到點形式傳送訊息
	 */
	@Test
	public void testQueueProducer() throws Exception {
		//1、建立一個連線工廠物件,需要指定服務的ip及埠。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.161:61616");
		//2、使用工廠物件建立一個Connection物件。
		Connection connection = connectionFactory.createConnection();
		//3、開啟連線,呼叫Connection物件的start方法。
		connection.start();
		//4、建立一個Session物件。
		//第一個引數:是否開啟事務。如果true開啟事務,第二個引數無意義。一般不開啟事務false。
		//第二個引數:應答模式。自動應答或者手動應答。一般自動應答。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//5、使用Session物件建立一個Destination物件。兩種形式queue、topic,現在應該使用queue
		Queue queue = session.createQueue("test-queue");
		//6、使用Session物件建立一個Producer物件。
		MessageProducer producer = session.createProducer(queue);
		//7、建立一個Message物件,可以使用TextMessage。
		/*TextMessage textMessage = new ActiveMQTextMessage();
		textMessage.setText("hello Activemq");*/
		TextMessage textMessage = session.createTextMessage("hello activemq");
		//8、傳送訊息
		producer.send(textMessage);
		//9、關閉資源
		producer.close();
		session.close();
		connection.close();
	}

Consumer:

消費者:接收訊息。
第一步:建立一個ConnectionFactory物件。
第二步:從ConnectionFactory物件中獲得一個Connection物件。
第三步:開啟連線。呼叫Connection物件的start方法。
第四步:使用Connection物件建立一個Session物件。
第五步:使用Session物件建立一個Destination物件。和傳送端保持一致queue,並且佇列的名稱一致。
第六步:使用Session物件建立一個Consumer物件。
第七步:接收訊息。
第八步:列印訊息。
第九步:關閉資源
@Test
	public void testQueueConsumer() throws Exception {
		//建立一個ConnectionFactory物件連線MQ伺服器
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.161:61616");
		//建立一個連線物件
		Connection connection = connectionFactory.createConnection();
		//開啟連線
		connection.start();
		//使用Connection物件建立一個Session物件
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//建立一個Destination物件。queue物件
		Queue queue = session.createQueue("test-queue");
		//使用Session物件建立一個消費者物件。
		MessageConsumer consumer = session.createConsumer(queue);
		//接收訊息
		consumer.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) {
					e.printStackTrace();
				}
				
			}
		});
		//等待接收訊息
		System.in.read();
		//關閉資源
		consumer.close();
		session.close();
		connection.close();
	}

Topic:

Producer:

使用步驟:
第一步:建立ConnectionFactory物件,需要指定服務端ip及埠號。
第二步:使用ConnectionFactory物件建立一個Connection物件。
第三步:開啟連線,呼叫Connection物件的start方法。
第四步:使用Connection物件建立一個Session物件。
第五步:使用Session物件建立一個Destination物件(topic、queue),此處建立一個Topic物件。
第六步:使用Session物件建立一個Producer物件。
第七步:建立一個Message物件,建立一個TextMessage物件。
第八步:使用Producer物件傳送訊息。
第九步:關閉資源。
@Test
	public void testTopicProducer() throws Exception {
		//1、建立一個連線工廠物件,需要指定服務的ip及埠。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.161:61616");
		//2、使用工廠物件建立一個Connection物件。
		Connection connection = connectionFactory.createConnection();
		//3、開啟連線,呼叫Connection物件的start方法。
		connection.start();
		//4、建立一個Session物件。
		//第一個引數:是否開啟事務。如果true開啟事務,第二個引數無意義。一般不開啟事務false。
		//第二個引數:應答模式。自動應答或者手動應答。一般自動應答。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//5、使用Session物件建立一個Destination物件。兩種形式queue、topic,現在應該使用topic
		Topic topic = session.createTopic("test-topic");
		//6、使用Session物件建立一個Producer物件。
		MessageProducer producer = session.createProducer(topic);
		//7、建立一個Message物件,可以使用TextMessage。
		/*TextMessage textMessage = new ActiveMQTextMessage();
		textMessage.setText("hello Activemq");*/
		TextMessage textMessage = session.createTextMessage("topic message");
		//8、傳送訊息
		producer.send(textMessage);
		//9、關閉資源
		producer.close();
		session.close();
		connection.close();
	}

Consumer:

消費者:接收訊息。
第一步:建立一個ConnectionFactory物件。
第二步:從ConnectionFactory物件中獲得一個Connection物件。
第三步:開啟連線。呼叫Connection物件的start方法。
第四步:使用Connection物件建立一個Session物件。
第五步:使用Session物件建立一個Destination物件。和傳送端保持一致topic,並且話題的名稱一致。
第六步:使用Session物件建立一個Consumer物件。
第七步:接收訊息。
第八步:列印訊息。
第九步:關閉資源
@Test
	public void testTopicConsumer() throws Exception {
		//建立一個ConnectionFactory物件連線MQ伺服器
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.161:61616");
		//建立一個連線物件
		Connection connection = connectionFactory.createConnection();
		//開啟連線
		connection.start();
		//使用Connection物件建立一個Session物件
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//建立一個Destination物件。topic物件
		Topic topic = session.createTopic("test-topic");
		//使用Session物件建立一個消費者物件。
		MessageConsumer consumer = session.createConsumer(topic);
		//接收訊息
		consumer.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) {
					e.printStackTrace();
				}
				
			}
		});
		System.out.println("topic消費者3啟動。。。。");
		//等待接收訊息
		System.in.read();
		//關閉資源
		consumer.close();
		session.close();
		connection.close();
	}

相關推薦

【基礎知識】ActiveMQ基本原理

system 鏈接 以及 重啟 alt 過濾器 全部 pro 相關 “來,根據你的了解說下 ActiveMQ 是什麽。” “這個簡單,ActiveMQ 是一個 MOM,具體來說是一個實現了 JMS 規範的系統間遠程通信的消息代理。它&h

ActiveMQ基本配置

activemq.xml jetty.xml 一、配置登錄監視控制臺1,啟用登錄驗證(authenticate屬性的值設置為true表示需要登錄驗證)e:\apache-activemq-5.14.5\conf\jetty.xml<bean id="securityConstraint" cla

ActiveMQ基本知識(一)

服務 serve cti log 功能 伸縮 class body app 1.ActiveMQ最主要的功能:實現JMS Provider,用來幫助實現高可用、高性能、可伸縮、易用和安全的企業級面向消息服務的系統。是一個異步的功能。 2.ActiveMQ特點:   完全支持

ActiveMQ基本教程 ActiveMQ持久化 ActiveMQ安全

一:快速上手 1:官方網站下載最新版本,當前最新為5.9.0 2:解壓後,開啟cmd,進入bin目錄,執行:activemq,即可啟動。(linux下,輸入nohup activemq &) 注意看打出的啟動日誌。 Loading message broke

springboot+activemq基本使用

匯入activemq啟動器 <!-- ActiveMQ的啟動器 --> <dependency> <groupId>org.springframework.boot</groupId>

ActiveMQ基本使用

同步索引庫分析: 方案一:在shop-manager中,新增商品的業務邏輯中,新增一個同步索引庫的業務邏輯。缺點:業務邏輯耦合度高,業務拆分不明確 方案二:業務邏輯在shop-search中實現,呼叫服務在shop-manager實現。業務邏輯分開。缺點:服務之間的耦合度變

MQ 入門(一)——MQ、JMS的瞭解與 activemq 基本操作

一、MQ 1.1 關於訊息佇列 MQ 訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過寫和檢索出入列隊的針對應用程式的資料(訊息)來通訊,而無需專用連線來連結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是通過直接呼叫彼此來通

訊息佇列原理及activeMQ基本知識點

activeMQ 1)廣義訊息佇列 a)訊息佇列本質:一次rpc變三次;內容儲存;合適的時間投遞 b)訊息佇列設計重點rpc通訊: 協議(http,tcp),序列化(二進位制流)儲存: 檔案/資料庫/記憶體消費關係處理: 訊息生產者,訊息消費者,訂閱關係事務/防丟防重/批量

ActiveMQ基本詳解與總結& 訊息佇列-推/拉模式學習 & ActiveMQ及JMS學習

ActiveMQ基本詳解與總結 MQ簡介:   MQ全稱為Message Queue, 訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過寫和檢索出入列隊的針對應用程式的資料(訊息)來通訊,而無需專用連線來連結它們。訊息傳遞指

ActiveMq基本概念

要求 更新 它的 高性能 將不 程序 一個 目的 性能 1) 隊列管理器 隊列管理器是MQ系統中最上層的一個概念,由它為我們提供基於隊列的消息服務。 2) 消息 在MQ中,消息分為兩種類型,非永久性(non-persistent)消息和永久性(persistent)消息,非

ActiveMQ】五 基本元素高階特性

Destination 高階特性 一 組合佇列 組合佇列 Composite Destinations 組合佇列允許用一個虛擬的destination代表多個destinations。這樣就可以通過composite destinations在一個操作中同時向多個queue傳送訊息。 1

訊息佇列之非同步訊息基本概念以及ActiveMQ整合Spring常用用法介紹

一 簡介 (1)非同步訊息: 所謂非同步訊息,跟RMI遠端呼叫、webservice呼叫是類似的,非同步訊息也是用於應用程式之間的通訊。但是它們之間的區別是: RMI、Hession/Burlap、webservice等遠端呼叫機制是同步的。也就是說,當客戶端呼叫遠端方法時,客戶端

activemq的幾種基本通訊方式總結(點對點-釋出訂閱)

簡介      在前面一篇文章裡討論過幾種應用系統整合的方式,發現實際上面向訊息佇列的整合方案算是一個總體比較合理的選擇。這裡,我們先針對具體的一個訊息佇列Activemq的基本通訊方式進行探討。activemq是JMS訊息通訊規範的一個實現。總的來說,訊息規範裡面定義最常見的幾種訊息通訊模式主要有

ActiveMQ訊息佇列的使用及應用(二丶JMS基本概念和模型)

一丶JMS基本概念(1) 概念 JMS Java Message Service,Java訊息服務,是Java EE中的一個技術 JMS規範 JMS 定義了Java中訪問訊息中介軟體的介面,並沒有給予實現,實現JMS介面的訊息中介軟體叫JMS Provider,例如ActiveMQ JMS Prov

Activemq幾種基本通訊方式總結

簡介      在前面一篇文章裡討論過幾種應用系統整合的方式,發現實際上面向訊息佇列的整合方案算是一個總體比較合理的選擇。這裡,我們先針對具體的一個訊息佇列Activemq的基本通訊方式進行探討。activemq是JMS訊息通訊規範的一個實現。總的來說,訊息規範裡面定義最常見的幾種訊息通訊模式主

activemq的幾種基本通訊方式總結

簡介      在前面一篇文章裡討論過幾種應用系統整合的方式,發現實際上面向訊息佇列的整合方案算是一個總體比較合理的選擇。這裡,我們先針對具體的一個訊息佇列Activemq的基本通訊方式進行探討。activemq是JMS訊息通訊規範的一個實現。總的來說,訊息規範裡面定義最常見的幾種訊息通訊模式主要有釋出-

深入淺出ActiveMQ(一)--JMS基本概念

這篇博文我們主要介紹J2EE中的一個重要規範JMS,因為這個規範在企業中的應用十分的廣泛,也比較重要,我們主要介紹JMS的基本概念和它的模式,訊息的消費以及JMS程式設計步驟。 基本概念 JMS是java的訊息服務,JMS的客戶端之間可以通過JMS服務進行非同步的訊

ActiveMQ-安裝和基本使用

1.Windows下安裝ActiveMQ 1.1.官網下載ActiveMQ 1.2.解壓修改配置檔案 apache-activemq-5.15.3\conf\activemq.xml 將0.0.0.0修改為localhost

activemq的幾種基本通訊方式總結(幾種通訊講的很清楚)

簡介      在前面一篇文章裡討論過幾種應用系統整合的方式,發現實際上面向訊息佇列的整合方案算是一個總體比較合理的選擇。這裡,我們先針對具體的一個訊息佇列Activemq的基本通訊方式進行探討。activemq是JMS訊息通訊規範的一個實現。總的來說,訊息規範裡面定義最常見的幾種訊息通訊模式主要有

Struts2框架(二) Web.xml, Struts.xml, Action.Java 基本配置

str web.xml images ava img ima blog XML ges Struts2框架(二) Web.xml, Struts.xml, Action.Java 基本配置