千家信息网

JMS消息activemq的使用分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关JMS消息activemq的使用分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一. 认识JMS1.1 概述对于JMS,
千家信息网最后更新 2026年11月03日JMS消息activemq的使用分析

这篇文章将为大家详细讲解有关JMS消息activemq的使用分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一. 认识JMS

1.1 概述

对于JMS,百度百科,是这样介绍的:JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

简短来说,JMS是一种与厂商无关的 API,用来访问消息收发系统消息。它类似于JDBC(Java Database Connectivity),提供了应用程序之间异步通信的功能。

JMS1.0是jsr 194里规定的规范(关于jsr规范,请点击)。目前最新的规范是JSR 343,JMS2.0。

好了,说了这么多,其实只是在说,JMS只是sun公司为了统一厂商的接口规范,而定义出的一组api接口。

1.2 JMS体系结构

描述如下:

  • JMS提供者(JMS的实现者,比如activemq jbossmq等)

  • JMS客户(使用提供者发送消息的程序或对象,例如在12306中,负责发送一条购票消息到处理队列中,用来解决购票高峰问题,那么,发送消息到队列的程序和从队列获取消息的程序都叫做客户)

  • JMS生产者,JMS消费者(生产者及负责创建并发送消息的客户,消费者是负责接收并处理消息的客户)

  • JMS消息(在JMS客户之间传递数据的对象)

  • JMS队列(一个容纳那些被发送的等待阅读的消息的区域)

  • JMS主题(一种支持发送消息给多个订阅者的机制)

1.3. JMS对象模型

  • 连接工厂(connectionfactory)客户端使用JNDI查找连接工厂,然后利用连接工厂创建一个JMS连接。

  • JMS连接 表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的。

  • JMS会话 session 标识JMS客户端和服务端的会话状态。会话建立在JMS连接上,标识客户与服务器之间的一个会话进程。

  • JMS目的 Destinatio 又称为消息队列,是实际的消息源

  • 生产者和消费者

  • 消息类型,分为队列类型(优先先进先出)以及订阅类型

二. ActiveMQ安装和思路

2.1. ActiveMQ的安装

从官网下载安装包, http://activemq.apache.org/download.html 赋予运行权限 chmod +x,windows可以忽略此步 运行 ./active start | stop 启动后,activeMQ会占用两个端口,一个是负责接收发送消息的tcp端口:61616,一个是基于web负责用户界面化管理的端口:8161。这两个端口可以在conf下面的xml中找到。http服务器使用了jettry。这里有个问题是启动mq后,很长时间管理界面才可以显示出来。

==》启动MQ服务器:

根据操作系统不同,进入相应win64/win32位目录,双击activemq.bat启动MQ。

ActiveMQ默认启动时,启动了内置的jetty服务器,提供一个用于监控ActiveMQ的admin应用 进入ActionMQ服务监控地址:浏览器输入http://127.0.0.1:8161/admin

2.2 整合思路

Spring最厉害的地方就是它的Bean了,还有它特有的IOC(控制反转)和AOP(面向切面编程)技术。有了这些,我们就可以不用new关键字构造对象,同时,可以方便地使用注入往类中的属性进行初始化。如果你编写过ActiveMQ之类的JMS应用程序,无论对于消息的生产者还是消费者,最重要的接口有以下两个: 1.ConnectionFactory 2.Destination

ConnectionFactory是一切的基础,有了它才有了Connection,然后才有Session,只有通过Session对象,我们才能创建消息队列、构建生产者/消费者,继而发送/接收消息。 Destination是一切的归宿,它就像总线一样,生产者发出消息要发到它上面,消费者取消息也要从这上面取。

试想,如果这一切都能借助Spring强大的Bean管理的话,我们在编写程序的时候会更加的方便简洁。幸运的是,ActiveMQ官方提供了完美的Spring框架支持,一切只需要在xml文件中配置即可~

Spring官方提供了一个叫JmsTemplate的类,这个类就专门用来处理JMS的,在该类的Bean配置标签中有两个属性connectionFactory-ref和defaultDestination-ref正好对应JMS中的ConnectionFactory和Destination,如果你有兴趣查看源码的话,就可以发现JmsTemplate帮我们做了大量创建的工作,我们只需要用它来进行收发信息就ok了,而ActiveMQ官方也提供了对应的实现包。

三、Spring 整合

3.1 xml配置方式一

                                                                                                                                                                                                                                                                        

3.2 xml配置方式二:

                                                                                                        classpath:conf/spring-config.properties                                                                                                                                                                                                                                                                                                                                                                                                                
import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;import org.springframework.stereotype.Component;@Component(value = "simpleMsgListener")public class SimpleMsgListener implements MessageListener {        //收到信息时的动作        @Override        public void onMessage(Message message) {                TextMessage textMessage = (TextMessage) message;                try {                        System.out.println("收到的信息:" + textMessage.getText());                } catch (JMSException e) {                        e.printStackTrace();                }        }}

四、spring boot配置

  • spring boot jsm官网

  • springboot与ActiveMQ整合

4.1、引入依赖配置

                                      org.springframework.boot                        spring-boot-starter-activemq                                                        org.apache.activemq                        activemq-pool                

4.2 application.properties配置

# ActiveMQ--------------------------------------------------------------------------------------------------------------# Specify if the default broker URL should be in memory. Ignored if an explicit broker has been specified.#spring.activemq.in-memory=false# URL of the ActiveMQ broker. Auto-generated by default. For instance `tcp://localhost:61616`spring.activemq.broker-url=tcp://127.0.0.1:61616# Login user of the broker.spring.activemq.user=admin# Login password of the broker.spring.activemq.password=admin# Trust all packages.#spring.activemq.packages.trust-all=false# Comma-separated list of specific packages to trust (when not trusting all packages).#spring.activemq.packages.trusted=# See PooledConnectionFactory.#spring.activemq.pool.configuration.*=# Whether a PooledConnectionFactory should be created instead of a regular ConnectionFactory.spring.activemq.pool.enabled=true# Maximum number of pooled connections.spring.activemq.pool.max-connections=50# Connection expiration timeout in milliseconds.spring.activemq.pool.expiry-timeout=10000# Connection idle timeout in milliseconds.spring.activemq.pool.idle-timeout=30000spring.jms.pub-sub-domain=false

4.3 boot类配置

import javax.jms.Queue;import javax.jms.Topic;import org.apache.activemq.ActiveMQConnectionFactory;import org.apache.activemq.command.ActiveMQQueue;import org.apache.activemq.command.ActiveMQTopic;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jms.config.DefaultJmsListenerContainerFactory;import org.springframework.jms.config.JmsListenerContainerFactory;@Configurationpublic class ActiveMQConfig {        @Value("${queueName}")        private String queueName;        @Value("${topicName}")        private String topicName;        @Value("${spring.activemq.user}")        private String usrName;        @Value("${spring.activemq.password}")        private String password;        @Value("${spring.activemq.broker-url}")        private String brokerUrl;                /**         * 

@describe: 配置队列

*

@author: whh

*

@date: 2019年8月9日 下午5:56:22

* @return */ @Bean public Queue queue() { return new ActiveMQQueue(queueName); } /** *

@describe:配置主题

*

@author: whh

*

@date: 2019年8月9日 下午5:56:40

* @return */ @Bean public Topic topic() { return new ActiveMQTopic(topicName); } /** *

@describe:连接工厂

*

@author: whh

*

@date: 2019年8月9日 下午5:57:14

* @return */ @Bean public ActiveMQConnectionFactory connectionFactory() { return new ActiveMQConnectionFactory(usrName, password, brokerUrl); } /** *

@describe: 监听队列bean

*

@author: whh

*

@date: 2019年8月9日 下午5:57:43

* @param connectionFactory * @return */ @Bean public JmsListenerContainerFactory jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory) { DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setConnectionFactory(connectionFactory); return bean; } /** *

@describe:监听主题 bean

*

@author: whh

*

@date: 2019年8月9日 下午5:58:17

* @param connectionFactory * @return */ @Bean public JmsListenerContainerFactory jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory) { DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); //设置为发布订阅方式, 默认情况下使用的生产消费者方式 bean.setPubSubDomain(true); bean.setConnectionFactory(connectionFactory); return bean; }}

五、发送者和接收者使用

5.1 发送者

import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import org.springframework.stereotype.Service;@Servicepublic class JmsSendDemo {        private  static final Logger LOGGER = LoggerFactory.getLogger(JmsSendDemo.class);            @Autowired        private JmsTemplate jmsTemplate;                public void execute(){                LOGGER.debug("执行定时任务-----------------直接违规数据定时:下发至医院端首页进行展示-----------------");                Destination destination = (Destination) AppContext.getBean("queue_test");                jmsTemplate.convertAndSend("mailbox", new Email("info@example.com", "Hello"));                //启动另一个方法                boolean flag=true;                LOGGER.debug("执行定时任务结束------------------------------");        }                        public void sendMessage(Destination destination,final String message) {                LOGGER.debug("发送消息到AMQ,消息内容为:"+message);                jmsTemplate.send(destination, new MessageCreator() {                        @Override                        public Message createMessage(Session session) throws JMSException {                                return session.createTextMessage(message);                        }                });        }}

5.1 接收者

import org.springframework.jms.annotation.JmsListener;import org.springframework.stereotype.Component;@Componentpublic class Receiver {    @JmsListener(destination = "mailbox", containerFactory = "myFactory")    public void receiveMessage(Email email) {        System.out.println("Received <" + email + ">");    }}

关于JMS消息activemq的使用分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

消息 客户 配置 队列 服务 程序 消费者 消费 生产 生产者 两个 之间 对象 工厂 服务器 应用 客户端 应用程序 接口 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 亿人帮互联网科技有限公司 科技与互联网 金融科技与互联网金融 云电互联网科技 广西互联网科技公司 广州善班互联网科技 顺网科技2021年互联网排名 科技赋能互联网健康 云创客互联网科技公司 乌鲁木齐新华智原互联网科技学校 济南有互联网科技公司吗 互联网科技公司营业执照怎么办理 美国互联网科技实力 互联网金融科技公司的优势 互联网科技资金流入 东营紫格互联网科技 艺电能源互联网科技有限公司招聘 众联互联网络科技 瑞安市蟠桃会互联网科技有限公司 小牛互联网科技有限公司地址 上海睿民互联网科技有限公司 科技制造互联网公司 互联网公司 科技公司 互联网金融科技平台 互联网科技博客 深圳卡尔迅互联网科技有限公司怎么样 哈尔滨秒房互联网科技有限公司 湖北码尼互联网科技有限公司电话 科技大学互联网 云南互联网科技学费
0