2021-05-12 14:32:11
ActiveMQ的簡單使用
本篇主要內容:
1、ActiveMQ安裝
2、佇列(queue)
3、主題(topic)
ActiveMQ安裝
1、下載:
http://activemq.apache.org/download.html
2、安裝:
我下載的是windows版本的,解壓。然後雙擊apache-activemq-5.14.3binwin64activemq.bat即可
3、存取:
http://127.0.0.1:8161/admin/ 使用者名稱/密碼:admin/admin
佇列(queue)
即一個訊息只能被一個消費者消費。
1、進入web管理介面
這裡看到佇列裡是沒有任何訊息的
2、編寫訊息生產者
第一步,引入jar
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.14.3</version>
</dependency>
第二步,編寫訊息生產者
package queues;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import Javax.jms.*;
/**
* 訊息生產者
*/
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();
//建立session
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//訊息目的地
Destination destination = session.createQueue("hello");
//訊息生產者
MessageProducer producer = session.createProducer(destination);
//設定不持久化,此處學習,實際根據專案決定
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//傳送訊息
for (int i = 0; i < 10; i++) {
//建立一條文字訊息
TextMessage message = session.createTextMessage("ActiveMQ:這是第 " + i + " 條訊息");
//生產者傳送訊息
producer.send(message);
}
session.commit();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
這裡建立了名為“hello”的訊息佇列,並向訊息佇列傳送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();
//建立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、測試。
先執行訊息生產者。
發現比之前多了一個名為hello的訊息佇列,並有10條訊息進入佇列了。
執行訊息消費者
發現消費者消費了之前發的10個訊息。
再次檢視web-queues頁面。
發現比之前多了一個消費者,而且有10條訊息出佇列了。
再啟動一個訊息消費者
發現控制台沒列印,說明佇列裡的訊息已經被消費完了。
再次啟動訊息生產者
發現2個消費者各消費5條訊息,說明佇列裡的訊息只容許被一個消費者消費。
此時,web-queues頁面應該是有2個消費者,共生成和消費20條訊息。
主題(topic)
即一個訊息可以被多個消費者接收
只需要將佇列中的如下程式碼
//訊息目的地
Destination destination = session.createQueue("hello");
改為
//訊息目的地
Destination destination = session.createTopic("hello");
檢視web-topics,如下:
啟動2個消費者,然後啟動生產者
檢視web-topics,如下:
發現2個消費者都消費了這10條訊息。
現在我們基本完成簡單的使用ActiveMQ了。
推薦閱讀:
Spring+Log4j+ActiveMQ實現遠端記錄紀錄檔——實戰+分析 http://www.linuxidc.com/Linux/2015-12/126163.htm
Spring下ActiveMQ實戰 http://www.linuxidc.com/Linux/2015-11/124854.htm
Java訊息佇列--ActiveMQ 實戰 http://www.linuxidc.com/Linux/2016-12/138848.htm
CentOS 6.5啟動ActiveMQ報錯解決 http://www.linuxidc.com/Linux/2015-08/120898.htm
ActiveMQ部署步驟和後台管理網站Service Unavailable問題解決 http://www.linuxidc.com/Linux/2016-11/137050.htm
Linux環境下面ActiveMQ埠號設定和WEB埠號設定 http://www.linuxidc.com/Linux/2012-01/51100.htm
相關文章