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信息:

生产者生产消息:

发送者发送消息:

 

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