Spring Boot基于Active MQ实现整合JMS

我们使用jms一般是使用spring-jms和activemq相结合,通过spring Boot为我们配置好的JmsTemplate发送消息到指定的目的地Destination。本文以点到点消息模式为例,演示如何在Spring Boot中整合 JMS 和 Active MQ ,实现 MQ 消息的生产与消费。

点到点消息模式定义:当消息发送者发送消息,消息代理获得消息后,把消息放入一个队列里,当有消息接收者来接收消息的时候,消息将从队列里取出并且传递给接收者,这时候队列里就没有此消息了。队列Queue的存在使得消息的异步传输成为可能。

1 安装ActiveMQ

关于具体的安装步骤,请参考专门介绍安装与部署的另一篇博文《ActiveMQ安装及部署教程图解》。

2 配置Active MQ 依赖

关于如何搭建 Spring Boot工程,请移步《如何使用intellij IDEA搭建Spring Boot项目》。假设项目已经创建完毕,在项目 pom 文件中加入Active MQ依赖:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-activemq</artifactId>
 <version>2.2.7.RELEASE</version>
</dependency>

3 修改application.properties配置文件

在application.properties中配置Active MQ:

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
#默认值false,表示点到点模式,true时代表发布订阅模式
spring.jms.pub-sub-domain=false

4 创建消息生产者和消费者

本文以点到点消息模式演示。新增消息生产者:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;

import javax.jms.Destination;

@Service("producer")
public class Producer {
 /**
  * 也可以注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装
  */
 @Autowired
 private JmsMessagingTemplate jmsTemplate;

 /**
  * 发送消息,destination是发送到的队列,message是待发送的消息
  *
  * @param destination
  * @param message
  */
 public void sendMessage(Destination destination, final String message) {
  jmsTemplate.convertAndSend(destination, message);
 }
}

通过JmsMessagingTemplate 的convertAndSend方法向目的地 destination发送消息。 新增消息监听者:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

@Component
public class ConsumerListener {
 private static Logger logger = LoggerFactory.getLogger(Consumer.class);
 /**
  * 使用JmsListener配置消费者监听的队列
  * @param receivedMsg 接收到的消息
  */
 @JmsListener(destination = "myDest.queue")
 public void receiveQueue(String receivedMsg) {
  logger.info("Consumer收到的报文为: {}", receivedMsg);
 }
}

@JmsListener是Spring 4.1 提供的一个新特性,用于简化JMS开发,只需使用此注解的属性destination指定要监听的目的地【myDest.queue】,即可接收该目的地发送的消息。消费者2 ConsumerListener2 的代码同上,但是日志如下:

logger.info("Consumer2收到的报文为: {}", receivedMsg);

温馨提示,消息消费者和生产者的类上必须加上注解 @Component 或者 @Service,使得消息消费者类就会被委派给Listener类,原理类似于使用SessionAwareMessageListener以及MessageListenerAdapter来实现消息驱动POJO。

5 测试 MQ

在Junit测试类中新增测试方法

import org.apache.activemq.command.ActiveMQQueue;
import javax.jms.Destination;

@Autowired
private Producer producer;
@Test
public void jmsActiveMqTest() throws InterruptedException {
 Destination destination = new ActiveMQQueue("myDest.queue");
 for (int i = 0; i < 21; i++) {
  producer.sendMessage(destination, String.format("My name is Wiener%s", i));
 }
}

控制台显示消费者接收到的消息如下:

Consumer收到的报文为: My name is Wiener0
Consumer2 收到的报文为:My name is Wiener1
Consumer收到的报文为: My name is Wiener2
Consumer2 收到的报文为:My name is Wiener3
Consumer收到的报文为: My name is Wiener4
Consumer2 收到的报文为:My name is Wiener5
Consumer收到的报文为: My name is Wiener6
Consumer2 收到的报文为:My name is Wiener7
...

经过上面的五个步骤,spring Boot、Jms 和 Active MQ 就基本上整合完成了,是不是使用起来很方便了!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot ActiveMQ连接池配置过程解析

    spring.activemq.pool.enabled=false时,每发送一条数据都需要创建一个连接,这样会出现频繁创建和销毁连接的场景.为了不踩这个坑,我们参考池化技术的思想,配置ActiveMQ连接池.在Spring Boot ActiveMQ发布/订阅消息模式原理解析的基础上配置ActiveMQ连接池,只需要做两项修改--配置文件和添加连接池依赖. 修改application.properties配置文件 ## URL of the ActiveMQ broker. Auto-gene

  • Spring Boot ActiveMQ如何设置访问密码

    Apache ActiveMQ是Apache出品,是最流行的,能力很强的开源消息总线.默认情况下,程序连接ActiveMQ是不需要密码的,为了安装起见,需要设置密码,提高安全性.本文分享如何设置访问ActiveMQ的账号密码. 小编使用的ActiveMQ版本是apache-activemq-5.15.13. 一.设置控制台管理密码 ActiveMQ使用的是jetty服务器,找到 ActiveMQ安装目录下的\conf\jetty.xml文件: <bean id="adminSecurity

  • Spring Boot ActiveMQ发布/订阅消息模式原理解析

    本文在<Spring Boot基于Active MQ实现整合JMS>的基础上,介绍如何使用ActiveMQ的发布/订阅消息模式.发布/订阅消息模式是消息发送者发送消息到主题(topic),而多个消息接收者监听这个主题:其中,消息发送者和接收者分别叫做发布者(publisher)和订阅者(subscriber),对于发布者来说,它和所有的订阅者就构成了一个1对多的关系.这种关系如下图所示: 发布/订阅模式的工作示意图 消息生产者将消息(发布)到topic中,可以同时有多个消息消费者(订阅)消费该

  • 详解Springboot整合ActiveMQ(Queue和Topic两种模式)

    写在前面: 从2018年底开始学习SpringBoot,也用SpringBoot写过一些项目.这里对学习Springboot的一些知识总结记录一下.如果你也在学习SpringBoot,可以关注我,一起学习,一起进步. ActiveMQ简介 1.ActiveMQ简介 Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件:由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行. 2.ActiveMQ下载 下载地址:htt

  • 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

  • SpringBoot整合ActiveMQ过程解析

    目录结构 引入 maven依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath/> </parent> <properties> &l

  • Springboot整合activemq的方法步骤

    今天呢心血来潮,也有很多以前的学弟问到我关于消息队列的一些问题,有个刚入门,有的有问题都来问我,那么今天来说说如何快速入门mq. 一.首先说下什么是消息队列? 1.消息队列是在消息的传输过程中保存消息的容器. 二.为什么要用到消息队列? 主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达 MySQL ,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误.通过使用消息队列

  • 浅谈Spring Boot 整合ActiveMQ的过程

    RabbitMQ是比较常用的AMQP实现,这篇文章是一个简单的Spring boot整合RabbitMQ的教程. 安装ActiveMQ服务器,(也可以不安装,如果不安装,会使用内存mq) 构建Spring boot项目,增加依赖项,只需要添加这一项即可 <!-- 添加acitivemq依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring

  • Spring Boot基于Active MQ实现整合JMS

    我们使用jms一般是使用spring-jms和activemq相结合,通过spring Boot为我们配置好的JmsTemplate发送消息到指定的目的地Destination.本文以点到点消息模式为例,演示如何在Spring Boot中整合 JMS 和 Active MQ ,实现 MQ 消息的生产与消费. 点到点消息模式定义:当消息发送者发送消息,消息代理获得消息后,把消息放入一个队列里,当有消息接收者来接收消息的时候,消息将从队列里取出并且传递给接收者,这时候队列里就没有此消息了.队列Que

  • spring boot基于DRUID实现数据源监控过程解析

    这篇文章主要介绍了spring boot基于DRUID实现数据源监控过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 随着需求和技术的日益革新,spring boot框架是越来越流行,她也越来越多地出现在我们的项目中,当然最主要的原因还是因为spring boot构建项目实在是太爽了,构建方便,开发简单,而且效率高.今天我们并不是来专门学习spring boot项目的,我们要讲的是数据源的加密和监控,监控到好说,就是不监控也没什么问题,但

  • Spring boot基于JPA访问MySQL数据库的实现

    本文展示如何通过JPA访问MySQL数据库. JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据,结合其他ORM的使用,能达到简化开发流程的目的,使开发者能够专注于实现自己的业务逻辑上. Spring boot结合Jpa 能够简化创建 JPA 数据访问层和跨存储的持久层功能,用户的持久层Dao接口只需要继承定义好的接口,无需再写实现类,就可以实现对象的CRUD操作以及分页排序等功能. 环境要求

  • Spring Boot 基于注解的 Redis 缓存使用详解

    看文本之前,请先确定你看过上一篇文章<Spring Boot Redis 集成配置>并保证 Redis 集成后正常可用,因为本文是基于上文继续增加的代码. 一.创建 Caching 配置类 RedisKeys.Java package com.shanhy.example.redis; import java.util.HashMap; import java.util.Map; import javax.annotation.PostConstruct; import org.springf

  • Spring Boot和Kotlin的无缝整合与完美交融

    前言 本文讲解 Spring Boot2 基础下,如何使用 Kotlin,并无缝整合与完美交融.为了让读者更加熟悉 Kotlin 的语法糖,笔者会在未来的几篇文章中,聊聊 Kotlin 的新特性及其语法糖.下面话不多说了,来一起看看详细的介绍吧 环境依赖 修改 POM 文件,添加 spring boot 依赖. <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo

  • Spring boot基于ScheduledFuture实现定时任务

    一. 背景 接上一篇,完成存储过程的动态生成后,需要构建定时任务执行存储过程 二. 环境 1.此随笔内容基于spring boot项目 2.数据库为mysql 5.7.9版本 3.jdk 版本为1.8 三. 内容 1.定义接口和接口参数bean: 1)在上一篇博客bean 的基础上把接口配置参数bean修改一下,添加一个配置参数值和排序字段:在添加一个监测项的bean,想查看其他的bean信息,请移步 @Entity @Table(name="monitor_warn_item") p

  • spring boot基于注解的声明式事务配置详解

    事务配置 1.配置方式一 1)开启spring事务管理,在spring boot启动类添加注解@EnableTransactionManagement(proxyTargetClass = true):等同于xml配置方式的 <tx:annotation-driven />(注意:1项目中只需配置一次,2需要配置proxyTargetClass = true) 2)在项目中需要添加事务的类或方法上添加注解@Transactional(建议添加在方法上),一般使用默认属性即可,若要使用事务各属性

  • Spring Boot基于数据库如何实现简单的分布式锁

    1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要介绍的是如果使用mysql实现简单的分布式锁,加锁流程如下图: 其实大致思想如下: 1.根据一个值来获取锁(也就是我这里的tag),如果当前不存在锁,那么在数据库插入一条记录,然后进行处理业务,当结束,释放锁(删除锁). 2.如果存在锁,判断锁是否过期,如果过期则更新锁的有效期,然后继续处理业务,当结束时,释放锁.如果没有过期,那么获取锁失败,退出. 2.数

  • spring boot基于Java的容器配置讲解

    spring容器是负责实例化.配置.组装组件的容器. 容器的配置有很多,常用的是xml.Java注解和Java代码. 在spring中Ioc容器相关部分是context和beans中.其中context-support保存着许多线程的容器实现.比如AnnotationConfigApplicationContext或者ClassPathXmlApplicationContext.两者只有接收的目标不同,前者接收Java类后者接收Xml文件.但作为spring容器的不同实现殊途同归. 下面我通过s

随机推荐