爲了快速上手ActiveMQ 找個一個windows版本的mq來實現它的功能html
1.http://activemq.apache.org/activemq-5158-release.html 下載java
2.解壓文件apache
3.根據本身電腦的位數,選擇 是32位仍是64位啓動windows
4.雙擊 activemp.bat 啓動mq後端
5.啓動成功之後能夠請求反問mq管理後端地址:127.0.0.1:8161服務器
6.第一次默認登陸帳戶和密碼 都是admin session
7.雙擊Queuestcp
name:隊列名字ide
Number Of Pending Messages 等待消費的消息 這個是當前未出隊列的數量。能夠理解爲總接收數-總出隊列數 測試
Number Of Consumers 消費者 這個是消費者端的消費者數量
Messages Enqueued 進入隊列的消息 進入隊列的總數量,包括出隊列的。 這個數量只增不減
Messages Dequeued 出了隊列的消息 能夠理解爲是消費這消費掉的數量
8.根據隊列的變化狀況,7圖中的各個數據都會出現相應的變化
9.pom.xml中引入 ActiveMQ的依賴
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> </dependency>
10.java MQ 生產者測試代碼:
package com.example.demo.producter; import javax.jms.Connection; import javax.jms.DeliveryMode; 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 ActiveMqProducter { public static String url = "tcp://127.0.0.1:61616"; public static void main(String[] args) throws JMSException { // 根據用戶名 和密碼,地址,獲取JMS 的鏈接工廠 61616端口 是mq服務的端口 而8161 是mq提供的管理後端的端口 ActiveMQConnectionFactory connetionFactory = new ActiveMQConnectionFactory("admin", "admin", url); // 從鏈接工廠建立一條鏈接 Connection connection = connetionFactory.createConnection(); // 開啓鏈接 connection.start(); // 建立session會話,第一參數表示啓用事務處理,第二個參數表示啓動哪一種應答模式,這裏啓用的是自動應答 一個相似 接受 或者發送的線程 Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 用session建立一個 Destination destination = session.createQueue("mq-msg"); // MessageProducer:消息生產者 MessageProducer producer = session.createProducer(destination); // 設置不持久化 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // 發送一條消息 for (int i = 1; i <= 5; i++) { sendMsg(session, producer, i); } connection.close(); } /** * 在指定的會話上,經過指定的消息生產者發出一條消息 * * @param session * 消息會話 * @param producer * 消息生產者 */ public static void sendMsg(Session session, MessageProducer producer, int i) throws JMSException { // 建立一條文本消息 TextMessage message = session.createTextMessage("Hello ActiveMQ!" + i); // 經過消息生產者發出消息 producer.send(message); } }
運行測試類之前:
運行測試類之後:
11 建立MQ java的消費者代碼:
package com.example.demo.consumer; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; public class Consumer { public static void main(String[] args) throws JMSException { // ConnectionFactory :鏈接工廠,JMS 用它建立鏈接 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://127.0.0.1:61616"); // JMS 客戶端到JMS Provider 的鏈接 Connection connection = connectionFactory.createConnection(); connection.start(); // Session: 一個發送或接收消息的線程 Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // Destination :消息的目的地;消息發送給誰. // 獲取session注意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置 Destination destination = session.createQueue("mq-msg"); // 消費者,消息接收者 MessageConsumer consumer = session.createConsumer(destination); while (true) { TextMessage message = (TextMessage) consumer.receive(); if (null != message) { System.out.println("收到消息:" + message.getText()); } else break; } session.close(); connection.close(); } }
運行消費者之後:
管理後端的數據變化:
12.經過簡單的代碼,能夠看出,生產者生產消息放到隊列之後,若是沒有消費者消費,則消息會一直存放在隊列裏(關閉MQ,沒有持久化除外),直到消費者成功消費完隊列的消息,消費成功 則通知隊列,清除該消息