JAVA springboot框架與activeMq的簡單應用

ActiveMq的簡介

ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演着特殊的地位。
主要特點:
  多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
 完全支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務)。
  對Spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統裏面去,而且也支持Spring2.0的特性。
    通過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上。
    支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA。
    支持通過JDBC和journal提供高速的消息持久化。
  從設計上保證了高性能的集羣,客戶端-服務器,點對點。
  支持Ajax。
  支持與Axis的整合。
  可以很容易得調用內嵌JMS provider,進行測試。

基本概念

  • 點對點模型(Point to Point) 使用隊列(Queue)作爲消息通信載體,滿足生產者與消費者模式,一條消息只能被一個消費者使用,未被消費的消息在隊列中保留直到被消費或超時。

  • 發佈訂閱模型(Pub/Sub) 使用主題作爲消息通信載體,類似於廣播模式,發佈者發佈一條消息,該消息通過主題傳遞給所有的訂閱者,在一條消息廣播之後才訂閱的用戶則是收不到該條消息的。

基本組件

  • Broker,消息代理,表示消息隊列服務器實體,接受客戶端連接,提供消息通信的核心服務。
  • Producer,消息生產者,業務的發起方,負責生產消息並傳輸給 Broker 。
  • Consumer,消息消費者,業務的處理方,負責從 Broker 獲取消息並進行業務邏輯處理。
  • Topic,主題,發佈訂閱模式下的消息統一彙集地,不同生產者向 Topic 發送消息,由 Broker 分發到不同的訂閱者,實現消息的廣播。
  • Queue,隊列,點對點模式下特定生產者向特定隊列發送消息,消費者訂閱特定隊列接收消息並進行業務邏輯處理。
  • Message,消息體,根據不同通信協議定義的固定格式進行編碼的數據包,來封裝業務 數據,實現消息的傳輸。

activeMq安裝成功後進入web端頁面http://localhost:8161/admin/index.jsp

activeMq生產者代碼:


package com.data.activemq.producter;


import javax.jms.*;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
 
public class MqProducter {
    //默認連接用戶名
        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();
            }
        }
}

activeMq消費者代碼:


package com.data.activemq.comsumer;


import javax.jms.*;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
 
public class MqComsumer {
    //默認連接用戶名
    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();
        }
    }
 
}

配置文件配置avtiveMq信息:

生產者生產消息:

發送者發送消息:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章