前言java
ActiveMQ他是Apache出品的一個JMS提供者,管理會話和隊列,運行在JVM下,支持多種語言,如JAVA,C++,C#,應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP,是一個消息的接受和轉發的容器,可用於消息推送;apache
最近由於有項目支付場景用到這個,因此就臨時看了下資料,粗糙的寫了的筆記服務器
配置ActiveMqsession
官網網站:http://activemq.apache.org/eclipse
目前版本是Apache ActiveMQ 5.11.1jsp
解壓下載的apache-activemq-5.11.1-bin.zip文件,進入bin文件下,進入win32/64文件夾,執行下面的activemq.bat運行ActiveMQ服務tcp
啓動完成後可登錄http://localhost:8161/admin/ 查看是否能登錄,能登陸說明服務啓動成功,頁面的用戶名和密碼在 根目錄:conf/jetty-realm.properties這裏面,默認的用戶名和密碼應該都是adminide
在Eclipse或者myeclipse裏面建立一個項目,並導入並導入apache-activemq-5.5.1\lib目錄下要用到的jar文件學習
如今須要建兩個類,一個事 發送的類,一個事接收的類測試
package com.activemq; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; public class Sender { private static final int SEND_NUMBER = 5; public static void main(String[] args) { // ConnectionFactory :鏈接工廠,JMS 用它建立鏈接 ConnectionFactory connectionFactory; // Connection :JMS 客戶端到JMS Provider 的鏈接 Connection connection = null; // Session: 一個發送或接收消息的線程 Session session; // Destination :消息的目的地;消息發送給誰. Destination destination; // MessageProducer:消息發送者 MessageProducer producer; // TextMessage message; // 構造ConnectionFactory實例對象,此處採用ActiveMq的實現jar connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616"); try { // 構造從工廠獲得鏈接對象 connection = connectionFactory.createConnection(); // 啓動 connection.start(); // 獲取操做鏈接 session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 獲取session注意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置 destination = session.createQueue("FirstQueue"); // 獲得消息生成者【發送者】 producer = session.createProducer(destination); // 設置不持久化,此處學習,實際根據項目決定 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // 構造消息,此處寫死,項目就是參數,或者方法獲取 sendMessage(session, producer); session.commit(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != connection) { connection.close(); } } catch (Throwable ignore) { } } } public static void sendMessage(Session session, MessageProducer producer) throws Exception { for (int i = 1; i <= SEND_NUMBER; i++) { TextMessage message = session.createTextMessage("ActiveMq 發送的消息" +i); // 發送消息到目的地方 System.out.println("發送消息:" + "ActiveMq 發送的消息" + i); producer.send(message); } } }
package com.activemq; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.TextMessage; public class Receiver { public static void main(String[] args) { // ConnectionFactory :鏈接工廠,JMS 用它建立鏈接 ConnectionFactory connectionFactory; // Connection :JMS 客戶端到JMS Provider 的鏈接 Connection connection = null; // Session: 一個發送或接收消息的線程 Session session; // Destination :消息的目的地;消息發送給誰. Destination destination; // 消費者,消息接收者 MessageConsumer consumer; connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616"); try { // 構造從工廠獲得鏈接對象 connection = connectionFactory.createConnection(); // 啓動 connection.start(); // 獲取操做鏈接 session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 獲取session注意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置 destination = session.createQueue("FirstQueue"); consumer = session.createConsumer(destination); while (true) { //設置接收者接收消息的時間,爲了便於測試,這裏誰定爲100s TextMessage message = (TextMessage) consumer.receive(100000); if (null != message) { System.out.println("收到消息" + message.getText()); } else { break; } } } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != connection) { connection.close(); } } catch (Throwable ignore) { } } } }
若是是在單機上測試的話,須要先運行Receiver在運行Sender,若是單機上測試,儘可能把Receiver類裏面的以下代碼100000值改大一點,這裏值含義爲接收消息的時間爲100秒,過了這個時間會自動關閉
TextMessage message = (TextMessage) consumer.receive(100000);
而後按照上面說的依次運行,在Sender運行以後,進入Receiver的console查看是否收到消息
若是想查看詳細的信息可在http://localhost:8161/admin/queues.jsp裏面查看連接數量,收發消息的數量