Springboot 整合 JMS

article/2025/9/22 4:17:37

ActiveMQ

JMS 仅支持 Java 平台

由于 JMS 是一套标准,所以 SpringBoot 整合 JMS 必然是整合 JMS 的某一个实现。

Apache ActiveMQ 是一个开源的消息中间件,完全支持 JMS 1.1 规范,支持多种编程语言( C、C++、C#、Delphi、Erlang、AdobeFlash、Haskell,Java、Javascript、Perl、PHP、Pike、Python、Ruby )和协议 (OpenWire、REST、STOMP、WS-Notification、MQTT、XMPP、AMQP ),且其提供了集群支持。

我们使用 JMS 一般是使用 spring-JMS 和 ActiveMQ 相结合,通过 SpringBoot 为我们配置好的
JmsTemplate 发送消息到指定目的地 Destination。

一、安装 ActiveMQ 并启动

注:JDK 版本需要 1.7 及以上才行

1、windows 版本

1、到 Apache官方网站下载最新的 ActiveMQ 的安装包,下载链接如下:ActiveMQ
下载。

(1)选择 ActiveMQ 5
在这里插入图片描述
(2)选择 windows,进行下载
在这里插入图片描述

2、下载后解压到本地目录下,解压目录如下:

在这里插入图片描述

3、打开 bin 目录,启动 activemq.bat 如果机器是 64 位,则打开 win64 目录,双击 activemq.bat 进行启动。 (注意:不要直接打开 bin 目录下的 activemq.bat,要选择 win64 或 win32 目录下的 activemq.bat

在这里插入图片描述
在这里插入图片描述

4、activemq.bat 运行结果如下:

在这里插入图片描述

5、ActiveMQ 启动成功!成功之后在浏览器输入ActiveMQ的管理页面地址( 本机地址是 http://127.0.0.1:8161 ),可以看到 ActiveMQ 的管理页面,用户名和密码默认都是 admin,如下:

在这里插入图片描述

6、ActiveMQ 的相关配置

1)用户名密码配置在 apache-activemq-5.14.5\conf\jetty-realm.properties 文件,格式是用户名:密码 ,角色名。
在这里插入图片描述
2)用户名权限配置信息记录在 apache-activemq-5.14.5\conf\jetty.xml 文件
在这里插入图片描述

2、Linux 版本

1、保证 Java 环境:JDK1.7 及以上
2、下载 ActiveMQ

wget http://mirrors.hust.edu.cn/apache//activemq/5.15.12/apache-activemq-5.15.12-bin.tar.gz

3、解压下载的文件

tar -zxvf apache-activemq-5.15.12-bin.tar.gz  

4、启动 ActiveMQ,命令如下

cd apache-activemq-5.15.12 
cd bin/    # 切换目录到 activemq 的 bin 目录下 
./activemq start   # 启动 activemq

在这里插入图片描述

5、输入服务器 http://ip:port 进行访问 ActiveMQ 管理页面,ActiveMQ 默认端口号是 8161。

在这里插入图片描述

二、SpringBoot 整合 ActiveMQ

1、添加依赖

两个 springboot 项目分别作为消息提供者(provider)和消费者(consumer)
在这里插入图片描述
提供者和消费者分别添加如下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!--消息队列连接池-->
<!--springboot 2.0及以上-->
<dependency><groupId>org.messaginghub</groupId><artifactId>pooled-jms</artifactId><version>1.0.4</version>
</dependency>

2、配置消息队列

(1)在两个项目中的 application.properires 配置消息队列

# failover:(tcp://localhost:61616,tcp://localhost:61617)
# tcp://localhost:61616
spring.activemq.broker-url=tcp://localhost:61616
#true 表示使用内置的MQ,false则连接服务器
# 用户密码
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.in-memory=false
#true表示使用连接池;false时,每发送一条数据创建一个连接
spring.activemq.pool.enabled=true
#连接池最大连接数
spring.activemq.pool.max-connections=10
#空闲的连接过期时间,默认为30秒
spring.activemq.pool.idle-timeout=30000
#强制的连接过期时间,与idleTimeout的区别在于:idleTimeout是在连接空闲一段时间失效,而expiryTimeout不管当前连接的情况,只要达到指定时间就失效。默认为0,never
spring.activemq.pool.expiry-timeout=0
#如果是点对点(queue),那么此处默认应该是false,如果发布订阅,那么一定设置为true
spring.jms.pub-sub-domain=true

(2)在提供者和消费者的启动类添加 @EnableJms 开启消息队列

// 1、提供者
@SpringBootApplication
@EnableJms //启动消息队列
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}
}// 2、消费者
@SpringBootApplication
@EnableJms //启动消息队列
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}

@EnableJms 会启动 jms 的注解扫描即发现 @JmsListener 注释的方法创建消息监听容器,相当于 <jms:annotation-d riven/>

3、服务提供者 provider

(1)配置类定义消息队列

import javax.jms.Queue;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class JMSBean {//定义存放消息的队列@Beanpublic Queue queue() {return new ActiveMQQueue("activeMQQueue");}
}

(2)ProviderController 发送消息

import javax.jms.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ProviderController {//注入存放消息的队列,用于下列方法一@Autowiredprivate Queue queue;//注入springboot封装的工具类@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;@RequestMapping("send")public void send(String name) {//方法一:添加消息到消息队列jmsMessagingTemplate.convertAndSend(queue, name);//方法二:这种方式不需要手动创建queue,系统会自行创建名为test的队列//jmsMessagingTemplate.convertAndSend("test", name);}
}

这里的 jmsMessagingTemplate 是用 @Autowired 注解自动注入的,在整个工程里都没有配置实例化的地方。
jmsMessagingTemplate 的实例化是 springboot 的 autoconfigure 自动注入的。
实现可以参见 JmsAutoConfiguration.java 的代码。当我们引入了 jms 相关的包,比如 activemq 的包,又定义了 ConnectionFactory 的实例,那么他就会自动生成一个 JmsTemplate 实例。

(3)在 ActiveMQ 管理页面中查看发送的消息

1)启动 provider,向消息队列添加数据
在这里插入图片描述
2)查看 ActiveMQ 管理页面
在这里插入图片描述

Number Of Pending Messages:消息队列中待处理的消息
Number Of Consumers:消费者的数量
Messages Enqueued:累计进入过消息队列的总量
Messages Dequeued:累计消费过的消息总量

4、服务消费者 consumer

(1)定义消费者的消息接收器:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;@Component
public class ConsumerService {@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;// 使用JmsListener配置消费者监听的队列@JmsListener(destination = "activeMQQueue")// SendTo 会将此方法返回的数据, 写入到 OutQueue 中去.@SendTo("SQueue")public String handleMessage(String name) {System.out.println("成功接受:" + name);return "成功接受:" + name;}
}

(2)启动消费者

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/fn7FL9ut.shtml

相关文章

1.JMS规范介绍

目录 1.什么是JMS规范 2.什么是MOM 3.MOM的特点 4.JMS和MOM的关联 5.JMS的体系结构 6.JMS常见基本概念 7.JMS 的事务性会话和非事务性会话 8.JMS消息的可靠性机制 1.什么是JMS规范 Java 消息服务&#xff08;Java Message Service&#xff09;是 java 平台中关于面向消息…

JMS 示例

JMS 开发示例。 使用weblogic8作为jms server。 1、在weblogic中配置JMS。 配置JMS connection factory 配置JMS File Store 配置JMS Server 配置JMS destination 2、创建JMS Sender package jms; import java.util.Hashtable; import javax.jms.JMSE

ActiveMQ详解一 —— JMS介绍

1. JMS概述 不同系统之间信息交换&#xff0c;有多种方式。 SUN公司提出了一种面向详细的中间件服务—— JMS&#xff0c;Java消息服务&#xff0c;是JavaEE的标准/规范之一。 JMS指出&#xff1a;消息的发送应该是异步的、非阻塞的。 也就是说&#xff0c;消息的发送者发送…

SpringBoot整合JMS

SpringBoot整合JMS 文章目录 SpringBoot整合JMS前言一、JMS、AMQP概念以及区别二、ActiveMQ安装三、SpringBoot整合ActiveMQ&#xff1a;队列模式实例1、创建demo项目2、添加依赖3、添加application配置4、添加配置文件ActiveMQConfig5、创建JMS组件文件6、发送消息控制器7、测…

JMS规范介绍

目录 1.什么是JMS规范 2.什么是MOM 3.MOM的特点 4.JMS和MOM的关联 5.JMS的体系结构 6.JMS常见基本概念 7.JMS 的事务性会话和非事务性会话 8.JMS消息的可靠性机制 1.什么是JMS规范 Java 消息服务&#xff08;Java Message Service&#xff09;是 java 平台中关于面向消息…

JMS规范

一、JMS经典模式详解 JMS即Java消息服务&#xff08;Java Message Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面向消息中间件&#xff08;MOM&#xff0c;Message oriented Middleware&#xff09;的API&#xff0c;用于在两个应用程序之间&#xff0c…

微服务 —— 消息服务中间件 JMS

一、消息服务中间件 对于大多数应用来说&#xff0c;可采用消息服务中间件来提升系统异步通信&#xff0c;消息解耦问题。 消息的作用&#xff1a;异步处理、应用解耦、流量削峰。 异步消息中的两个概念&#xff1a;消息代理、目的地 当消息发送者发送消息&#xff0c;由消息…

JMS解析(二)——JMS简介

JMS解析&#xff08;一&#xff09;——JMS简介_踩踩踩从踩的博客-CSDN博客 前言 本篇文章会紧接着上篇文章未介绍完毕的JMS规范&#xff0c;继续消息接收、事务管理、持久化以及应用的介绍。 消息接收 消息接收分为队列接收和topic消息接收 对于队列的接收基本的consumer…

JMS(Java消息服务)(Activemq简单介绍)

是什么&#xff1f; JMS&#xff08;java消息服务&#xff09;是规范&#xff0c;它定义了一些规则&#xff0c;一些接口。具体实现由各种做这个产品的厂家或开源组织来实现。 为什么&#xff1f; 在JMS还没有诞生前&#xff0c;每个企业都会有自己的一套内部消息系统&#…

JMS解析(一)——JMS简介

消息中间件MQ及ActiveMQ介绍_踩踩踩从踩的博客-CSDN博客 前言 上篇文章对消息中间件做了个解析&#xff0c;以及ActiveMQ的安装和基本使用&#xff0c;做了个基本了解&#xff0c;因为如果不了JMS规范&#xff0c;一定是不学不好消息中间件和ActiveMQ,本篇文章会从JMS是什么&…

JMS基本概念

简介 JMS即Java消息服务&#xff08;Java Message Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面向消息中间件&#xff08;MOM&#xff09;的API&#xff0c;用于在两个应用程序之间&#xff0c;或分布式系统中发送消息&#xff0c;进行异步通信。Java消…

JMS概述

** 一、什么是JMS ** JMS即Java消息服务&#xff08;Java Message Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面向消息中间件&#xff08;MOM&#xff09;的API&#xff0c;用于在两个应用程序之间&#xff0c;或分布式系统中发送消息&#xff0c;进行…

深入浅出JMS(一)——JMS简介

如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了。为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随着这个疑惑,短息和留言应运而生,无论手机是否开机、是否未…

详解 ROI Align 的基本原理和实现细节

转载至http://blog.leanote.com/post/afanti.denggmail.com/b5f4f526490b 欢迎支持原作者。 ROI Align 是在Mask-RCNN这篇论文里提出的一种区域特征聚集方式, 很好地解决了ROI Pooling操作中两次量化造成的区域不匹配(mis-alignment)的问题。实验显示&#xff0c;在检测测任务…

眼睛ROI区域裁剪

为了用深度方法训练一个睁闭眼模型&#xff0c;这里不需要再提取特征&#xff0c;而是需要用到眼睛的原图&#xff0c;第一步就是把眼睛区域裁剪下来。 本文用的是opencv的检测库shape_predictor_68_face_landmarks.dat&#xff0c;得到68特征点后&#xff0c;根据特征点来裁剪…

目标检测Fast RCNN中的ROI pooling

目标检测的任务可以分为两步&#xff1a;选出所有可能存在物体的候选框、判断候选框中的物体是否为前景或者背景。 但是这可能会产生很多的候选区域&#xff0c;如果把它们都喂入CNN&#xff0c;计算量将特别大&#xff0c;这也是rcnn效率低的原因所在。rcnn对每个候选区域都进…

ROI Pooling原理及实现

目标检测architecture通常可以分为两个阶段&#xff1a; &#xff08;1&#xff09;region proposal&#xff1a;给定一张输入image找出objects可能存在的所有位置。这一阶段的输出应该是一系列object可能位置的bounding box。这些通常称之为region proposals或者 regions of …

ROI数据分析

目录 1. 专业术语解读 2. 参考资料 1. 专业术语解读 ROI(Return On Investment)投入产出比ROI 是指通过投资而应返回的价值,即企业从一项投资活动中得到的经济回报,通俗点来说就是我们获得的收益和投入成本的比值。 如下图所示,比较多个渠道的效果,寻找最大的ROI渠道。…

ROIAlign源码详细解析

ROI Align 是在Mask-RCNN这篇论文里提出的一种区域特征聚集方式, 很好地解决了ROI Pooling操作中两次量化造成的区域不匹配(mis-alignment)的问题。 其中ROI Align用的是双线性插值(内插)来实现的&#xff0c;在分析源码前我们先来了解下什么是双线性插值。 插值定义&#xf…

Opencv----ROI设置

1 ROI概念 ROI是region of interest首字母的简写&#xff0c;翻译为感性趣的区域&#xff0c;其对象时图像。 对于图像&#xff0c;其实就是一个二维数组&#xff0c;只不过这个二维数组有点特殊&#xff0c;它有头信息&#xff0c;在头信息里会有描述这个二维数组的大小、图片…