activemq 是JMS 規(guī)范的一種實現(xiàn),我們先不討論JMS,也不先討論應用場景,我們先來感受一下這個消息中間件是怎么玩的。
- 安裝(略)---百度
1.1 啟動:win (不要究竟是否在linux 上,最簡單的先玩起來)
./bin/activemq start
訪問:http://127.0.0.1:8161/admin 后臺管理,默認密碼 admin/admin
2: java 客戶端操作
maven:
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.13</version>
</dependency>
java:
// p2p helloworld 點對點通信,消息發(fā)送者, 類比 jdbc
public class HelloWorldSender {
public static void main(String[] args) throws JMSException {
//1.客戶端連接到服務器
ConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
//2.創(chuàng)建一次連接
Connection connection = activeMQConnectionFactory.createConnection();
//3.開啟
connection.start();
//4. 創(chuàng)建session 對象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5. 創(chuàng)建一個隊列
Queue queue = session.createQueue("test-hello");
//6. 創(chuàng)建消息發(fā)送者
MessageProducer producer = session.createProducer(queue);
//7. 發(fā)送消息
producer.send(session.createTextMessage("hello world"));
//關閉資源
producer.close();
session.close();
connection.close();
}
}
上面是我們使用activemq 實現(xiàn)了一個簡單的p2p 的消息投遞,主要涉及對象:
- ConnectionFactory : 連接工廠,就是連接到activemq 服務端(C/S 架構)
- Connection : 由ConnectionFactory 創(chuàng)建來的一個連接
- Session : 由 Connection 創(chuàng)建而來的 一個session 對象,表示一次和服務端的會話
- Queue : 由 Session 創(chuàng)建的一個隊列,用來存儲消息。
- MessageProducer : 消息發(fā)送者
java: 消費者
public class HelloWorldCustomer {
public static void main(String[] args) throws JMSException {
//1. 創(chuàng)建連接工廠
ConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
//2.創(chuàng)建一個連接
Connection connection = activeMQConnectionFactory.createConnection();
//3.開啟
connection.start();
//4.創(chuàng)建一個session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5.創(chuàng)建一個Queue 隊列
Queue queue = session.createQueue("test-hello");
// 6.消費消息
MessageConsumer consumer = session.createConsumer(queue);
TextMessage message = (TextMessage) consumer.receive();
String messageText = message.getText();
System.out.println(messageText);
// 關閉資源
consumer.close();
session.close();
connection.close();
}
}
上面我們創(chuàng)建了一個消費者。
我們現(xiàn)在對activemq 中間件有了最初步的認識,接下來我們就來說一下 JMS 規(guī)范,運用場景的話簡單說一下:系統(tǒng)內(nèi)部解耦,多系統(tǒng)通信,分布式事務,流量削峰。。。
JMS: (百度)
JMS即Java消息服務(Java Message Service)應用程序接口,是一個Java平臺中關于面向消息中間件(MOM)的API,用于在兩個應用程序之間,或分布式系統(tǒng)中發(fā)送消息,進行異步通信。Java消息服務是一個與具體平臺無關的API,絕大多數(shù)MOM提供商都對JMS提供支持。
簡單點說:就是JMS 是定義消息中間的開發(fā)規(guī)范 api ,比如jdbc 一樣,有很多實現(xiàn)。activemq 就是jms 規(guī)范的實現(xiàn)之一。
jms 具體內(nèi)容:
- 架構體系組成,也就是構造角色有:
- jms 服務端(activemq server 服務器)
- jms 客戶端 (activemq client)
- jms 消息發(fā)送者(MessageProducer )
- jms 消息消費者 (MessageConsumer )
- jms 隊列 (Queue )
- jms 主題 (Topic)
- jms 消息 (Message)
上面的jms 規(guī)范定義了這些組成角色,也就是說,如果 jms 規(guī)范的實現(xiàn) 必須要有以上實現(xiàn)以上角色的對象。
- 抽象出的編程接口 api :
- ConnectionFactory 接口(連接工廠)
- Connection 接口(連接)
- Destination 接口(目標 )--- activemq 中的 Queue 或者 Topic
- Session 接口(會話)
- MessageProducer 接口(消息生產(chǎn)者)
- MessageConsumer 接口(消息消費者)
- Message 接口(消息)
是否對 對編程接口非常熟悉?是的,我們可以在 helloworld 中可以找到這些對象,也說明了 activemq 就是對jms 規(guī)范的實現(xiàn)。
- 消息通信模型:
- p2p 點對點 模式
- topic 發(fā)布/訂閱模式
上面是jms 規(guī)定的消息模型,也是activemq 中的兩種消息模型。具體的點對點或者topic 具有的特點,我們會在后面說明。如迫不及待想知道,可以百度查詢。上訴jms規(guī)范來自百度,僅為個人解讀。