訊息佇列-ActiveMQ的使用(Windows系統)
2.下載完成後,解壓到本地目錄(我放在了D盤),我的電腦是Windows系統64位的,所以進入
D:\apache-activemq-5.15.2-bin\apache-activemq-5.15.2\bin\win64 的資料夾,找到activemq.bat,如下圖所示:
3.雙擊activemq.bat,進入訊息佇列,展示如下圖所示:
ActiveMQ預設使用的TCP連線埠是61616,啟動後,登入http://localhost:8161/admin/ ,預設使用者名稱和密碼為admin,admin,進入控制檯功能,如下圖所示:
4.開啟Eclipse,建立名為MQ的Java專案,使用Maven管理依賴,所以建立pom.xml,程式碼如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>activemq-sample</groupId> <artifactId>activemq-sample</artifactId> <version>0.0.1-SNAPSHOT</version> <name>activemq-sample</name> <description>an activemq practice</description> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <!-- activemq-core 5.7.0 使用bunble打包,需要新增相關外掛 --> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> </plugin> </plugins> </build> <dependencies> <!-- activemq的maven依賴 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> <type>bundle</type> </dependency> </dependencies> </project>
5.在專案下建立lib資料夾,放activemq-all-5.15.2.jar,並配置到路徑中,此jar包可在解壓檔案中找到,如下圖所示:
6.消費者MsgConsumer類程式碼,如下:
package mq; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class MsgConsumer implements MessageListener { private static final String BROKER_URL = "failover://tcp://localhost:61616"; public static void main(String[] args) throws JMSException { // 建立連線工廠 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL); // 獲得連線 Connection conn = connectionFactory.createConnection(); // start conn.start(); // 建立Session,此方法第一個引數表示會話是否在事務中執行,第二個引數設定會話的應答模式 Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); // 建立佇列 Destination dest = session.createQueue("test-queue"); // 建立訊息生產者 MessageConsumer consumer = session.createConsumer(dest); // 初始化MessageListener MsgConsumer msgConsumer = new MsgConsumer(); // 給消費者設定監聽物件 consumer.setMessageListener(msgConsumer); } /** * 消費者需要實現MessageListener介面 介面有一個onMessage(Message message)需要在此方法中做訊息的處理 */ @Override public void onMessage(Message msg) { TextMessage txtMessage = (TextMessage) msg; try { System.out.println("get message:" + txtMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } }
7.生產者MsgProducer類程式碼,如下:
package mq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MsgProducer {
// 如果你在本地啟動,可以直接使用空的ActiveMQConnectionFactory建構函式
private static final String BROKER_URL = "failover://tcp://localhost:61616";
public static void main(String[] args) throws JMSException, InterruptedException {
// 建立連線工廠
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);
// 獲得連線
Connection conn = connectionFactory.createConnection();
// start
conn.start();
// 建立Session,此方法第一個引數表示會話是否在事務中執行,第二個引數設定會話的應答模式
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 建立佇列
Destination dest = session.createQueue("test-queue");
// 建立訊息生產者
MessageProducer producer = session.createProducer(dest);
for (int i = 0; i < 100; i++) {
// 初始化一個mq訊息
TextMessage message = session.createTextMessage("這是第 " + i + " 條訊息!");
// 傳送訊息
producer.send(message);
System.out.println("send message:訊息" + i);
// 暫停3秒
Thread.sleep(3000);
}
// 關閉mq連線
conn.close();
}
}
8.配置jdk版本
此專案需要系統配置和Eclipse配置jdk版本相同,我使用的是jdk1.8,三處需要配置檢查,避免出現報錯
1)滑鼠右鍵點選MQ專案,進入properties,選中jdk版本為1.8,如下圖所示:
2)工具欄Windows,選擇Preference-Java-Complier,jdk版本為1.8,如下圖所示:
3)計算機的環境變數,配置為jdk1.8所在的目錄,如下圖所示:
9.先執行消費者MsgConsumer,在執行生產者MsgProducer,仔細觀察規律(建議在MsgConsumer下debug下斷點),activeMQ使用中,結果如下圖所示:
通過這個例項可以對ActiveMQ的應用有一個簡單的瞭解。