(jms)ActiveMQ 安裝配置.

前言java

ActiveMQ他是Apache出品的一個JMS提供者,管理會話和隊列,運行在JVM下,支持多種語言,如JAVA,C++,C#,應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP,是一個消息的接受和轉發的容器,可用於消息推送;apache

最近由於有項目支付場景用到這個,因此就臨時看了下資料,粗糙的寫了的筆記服務器

配置ActiveMqsession

一、下載ActiveMQ

官網網站:http://activemq.apache.org/eclipse

目前版本是Apache ActiveMQ 5.11.1jsp

二、運行ActiveMQ

解壓下載的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文件學習

如今須要建兩個類,一個事 發送的類,一個事接收的類測試

 

Sender.java  //發送消息的類

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);
        }
    }
}

Receiver.java //接收消息的類

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裏面查看連接數量,收發消息的數量

相關文章
相關標籤/搜索