activemq 是JMS 規(guī)范的一種實現,我們先不討論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 實現了一個簡單的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)建了一個消費者迄损。
我們現在對activemq 中間件有了最初步的認識定躏,接下來我們就來說一下 JMS 規(guī)范,運用場景的話簡單說一下:系統(tǒng)內部解耦芹敌,多系統(tǒng)通信痊远,分布式事務,流量削峰氏捞。碧聪。。
JMS: (百度)
JMS即Java消息服務(Java Message Service)應用程序接口液茎,是一個Java平臺中關于面向消息中間件(MOM)的API逞姿,用于在兩個應用程序之間,或分布式系統(tǒng)中發(fā)送消息捆等,進行異步通信滞造。Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持栋烤。
簡單點說:就是JMS 是定義消息中間的開發(fā)規(guī)范 api ,比如jdbc 一樣谒养,有很多實現。activemq 就是jms 規(guī)范的實現之一明郭。
jms 具體內容:
- 架構體系組成买窟,也就是構造角色有:
- jms 服務端(activemq server 服務器)
- jms 客戶端 (activemq client)
- jms 消息發(fā)送者(MessageProducer )
- jms 消息消費者 (MessageConsumer )
- jms 隊列 (Queue )
- jms 主題 (Topic)
- jms 消息 (Message)
上面的jms 規(guī)范定義了這些組成角色,也就是說薯定,如果 jms 規(guī)范的實現 必須要有以上實現以上角色的對象蔑祟。
- 抽象出的編程接口 api :
- ConnectionFactory 接口(連接工廠)
- Connection 接口(連接)
- Destination 接口(目標 )--- activemq 中的 Queue 或者 Topic
- Session 接口(會話)
- MessageProducer 接口(消息生產者)
- MessageConsumer 接口(消息消費者)
- Message 接口(消息)
是否對 對編程接口非常熟悉?是的沉唠,我們可以在 helloworld 中可以找到這些對象疆虚,也說明了 activemq 就是對jms 規(guī)范的實現。
- 消息通信模型:
- p2p 點對點 模式
- topic 發(fā)布/訂閱模式
上面是jms 規(guī)定的消息模型,也是activemq 中的兩種消息模型径簿。具體的點對點或者topic 具有的特點罢屈,我們會在后面說明。如迫不及待想知道篇亭,可以百度查詢缠捌。上訴jms規(guī)范來自百度,僅為個人解讀译蒂。