簡單的搭建一個ActiveMQ的學習Demo
參考:消息隊列之異步消息的基本概念以及ActiveMQ整合Spring的常用用法介紹
本篇主要內(nèi)容:
1供鸠、ActiveMQ安裝
2莺掠、隊列(queue)
3春贸、主題(topic)
ActiveMQ安裝##
1、下載:
2、安裝:
我下載的是windows版本的,解壓趣倾。然后雙擊apache-activemq-5.14.3\bin\win64\activemq.bat即可
3、訪問:
http://127.0.0.1:8161/admin/ 用戶名/密碼:admin/admin
隊列(queue)##
即一個消息只能被一個消費者消費某饰。
1儒恋、進入web管理界面
這里看到隊列里是沒有任何消息的
2、編寫消息生產(chǎn)者
第一步黔漂,引入jar
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.14.3</version>
</dependency>
第二步诫尽,編寫消息生產(chǎn)者
package queues;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* 消息生產(chǎn)者
*/
public class JMSProducer {
//默認連接用戶名
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
//默認連接密碼
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
//默認連接地址
private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) {
//連接工廠
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL);
try {
//連接
Connection connection = connectionFactory.createConnection();
//啟動連接
connection.start();
//創(chuàng)建session
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//消息目的地
Destination destination = session.createQueue("hello");
//消息生產(chǎn)者
MessageProducer producer = session.createProducer(destination);
//設(shè)置不持久化,此處學習炬守,實際根據(jù)項目決定
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//發(fā)送消息
for (int i = 0; i < 10; i++) {
//創(chuàng)建一條文本消息
TextMessage message = session.createTextMessage("ActiveMQ:這是第 " + i + " 條消息");
//生產(chǎn)者發(fā)送消息
producer.send(message);
}
session.commit();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
這里創(chuàng)建了名為“hello”的消息隊列牧嫉,并向消息隊列發(fā)送10條消息。
第三步减途,編寫消息消費者
package queues;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* 消息消費者
*/
public class JMSConsumer {
//默認連接用戶名
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
//默認連接密碼
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
//默認連接地址
private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) {
//連接工廠
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL);
try {
//連接
Connection connection = connectionFactory.createConnection();
//啟動連接
connection.start();
//創(chuàng)建session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//消息目的地
Destination destination = session.createQueue("hello");
//消息消費者
MessageConsumer consumer = session.createConsumer(destination);
while (true) {
TextMessage message = (TextMessage) consumer.receive();
if (message != null) {
System.out.println("接收到消息: " + message.getText());
} else {
break;
}
}
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
這里指向名為“hello”的消息隊列酣藻,并向消息隊列一直取消息出來。
3观蜗、測試臊恋。
先運行消息生產(chǎn)者。
發(fā)現(xiàn)比之前多了一個名為hello的消息隊列墓捻,并有10條消息進入隊列了抖仅。
運行消息消費者
發(fā)現(xiàn)消費者消費了之前發(fā)的10個消息。
再次查看web-queues頁面砖第。
發(fā)現(xiàn)比之前多了一個消費者撤卢,而且有10條消息出隊列了。
再啟動一個消息消費者
發(fā)現(xiàn)控制臺沒打印梧兼,說明隊列里的消息已經(jīng)被消費完了放吩。
再次啟動消息生產(chǎn)者
發(fā)現(xiàn)2個消費者各消費5條消息,說明隊列里的消息只容許被一個消費者消費羽杰。
此時渡紫,web-queues頁面應該是有2個消費者到推,共生成和消費20條消息。
主題(topic)##
即一個消息可以被多個消費者接收
只需要將隊列中的如下代碼
//消息目的地
Destination destination = session.createQueue("hello");
改為
//消息目的地
Destination destination = session.createTopic("hello");
查看web-topics,如下:
啟動2個消費者惕澎,然后啟動生產(chǎn)者
查看web-topics,如下:
發(fā)現(xiàn)2個消費者都消費了這10條消息莉测。
現(xiàn)在我們基本完成簡單的使用ActiveMQ了。