Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot JMS(ActiveMQ) 使用实践

SpringBoot JMS(ActiveMQ) 使用实践

作者头像
yawn
发布于 2018-03-14 03:45:05
发布于 2018-03-14 03:45:05
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

ActiveMQ

1. 下载windows办的activeMQ后,在以下目录可以启动:

2. 启动后会有以下提示

3. 所以我们可以通过http://localhost:8161访问管理页面,通过tcp://localhost:61616来连接消息服务器,用到的用户名和密码都在以下文件中(默认为admin=admin)

springboot连接ActiveMQ

1. 加入依赖:

            spring-boot-starter-activemq

2. 配置连接属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=false

消息的发送和接收

生产者/消费者模式

    1. 创建生产者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.demo8activemq.jms;

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.jms.Destination;

/**
 * @author Created by yawn on 2017-10-26 16:15
 */
@Service
public class Producer {

    @Resource
    private JmsMessagingTemplate jmsMessagingTemplate;

    public void sendMsg(String destinationName, String message) {
        System.out.println("============>>>>> 发送queue消息 " + message);
        Destination destination = new ActiveMQQueue(destinationName);
        jmsMessagingTemplate.convertAndSend(destination, message);
    }
}

    2. 创建消费者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.demo8activemq.jms;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;

/**
 * @author Created by yawn on 2017-10-26 16:15
 */
@Service
public class Consumer {

    @JmsListener(destination = "test.queue")
    public void receiveMsg(String text) {
        System.out.println("<<<<<<============ 收到消息: " + text);
    }
}

    注意: @JmsListener是一个可重复的注解,在java7及以下版本jdk中,可以使用@JmsListeners代替它。

    3. 测试类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo8ActivemqApplicationTests {

	@Resource
	private Producer producer;

	@Test
	public void contextLoads() {
		for (int i = 0; i < 10; i++) {
			producer.sendMsg("test.queue", "Queue Message " + i);
		}
	}
}

    4. 运行测试

发布/订阅模式

    1. 发布话题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.demo8activemq.jms;

import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.jms.Destination;

/**
 * @author Created by yawn on 2017-10-28 17:09
 */
@Service
public class Publisher {

    @Resource
    private JmsMessagingTemplate jmsMessagingTemplate;

    public void publish(String destinationName, String message) {
        Destination destination = new ActiveMQTopic(destinationName);
        System.out.println("============>>>>> 发布topic消息 " + message);
        jmsMessagingTemplate.convertAndSend(destination, message);
    }
}

    2. 订阅话题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.demo8activemq.jms;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;

/**
 * @author Created by yawn on 2017-10-28 17:15
 */
@Service
public class Subscriber {

    @JmsListener(destination = "test.topic", containerFactory = "myJmsContainerFactory")
    public void subscribe(String text) {
        System.out.println("===========<<<<<<<<收到订阅的消息" + text);
    }
}

    注意: 在pub/sub模式中,对消息的监听需要对containerFactory进行以下配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Bean
    JmsListenerContainerFactory<?> myJmsContainerFactory(ConnectionFactory connectionFactory){
        SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(true);
        return factory;
    }

    3. 测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Test
	public void test() {
		for (int i = 0; i < 10; i++) {
			publisher.publish("test.topic", "Topic Message " + i);
		}
	}

应用

    按照以上步骤,在springboot中很容易就实现类两种模式的消息发送和接收。但是jms具体的应用场景是在不同的应用程序之间,生产者和消费者往往是在不同的应用中的。此外,以上例子中的消息我们只发送字符串,其实还可以发送Object类型的消息,甚至可以使用messageCreator自定义消息的转换,而不使用convertAndSend方法默认转换。

多个应用程序之间发送消息

1. 先使用一个只有发送者,没有消费者或订阅者的应用发送两类消息各十条

2. 我们打开localhost:8161,可以看到

    两类都曾有十条消息入队,但只有queues中还存留10条消息。

3. 现在我们启动包含消费者和订阅者的应用程序

    果然,只有消费者收到了queues中的消息。

    这说明订阅者接收topic是需要在topic发布之前订阅;而生产/消费模式下,消息发出后会存放在队列中,等待消费者消费。

    4. 我们先启动两个包含订阅者和消费者的程序,再发布消息

    两个订阅者都收到 topic message 1~9, 而消费者中,一个收到消息 1、3、5、7、9,另一个收到0、2、4、6、8。

    这说明有多个消息接收者时,生产/消费模式下多个消费者会轮流消费队列中的消息,而pub/sub模式下所有订阅者都会得到所有的消息。

    以上就是在多个应用程序之间验证了发布/订阅模式和生产/消费模式的不同特点。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
springboot整合ActiveMQ1(基本使用)
说明:acitveMQ 版本为:5.9.1,springboot 版本为 2.0.3
用户2038589
2019/06/04
6440
springboot整合ActiveMQ1(基本使用)
SpringBoot开发案例之整合ActiveMQ实现秒杀队列
在实际生产环境中中,通常生产者和消费者会是两个独立的应用,这样才能通过消息队列实现了服务解耦和广播。因为此项目仅是一个案例,为了方便期间,生产和消费定义在了同一个项目中。
小柒2012
2018/10/09
4.6K1
SpringBoot开发案例之整合ActiveMQ实现秒杀队列
SpringBoot整合ActiveMQ实现Queue和Topic两种模式
最近小编在学习消息队列,然后选中了ActiveMQ,来进行学习.于是探索了好久,来整理一下自己的学习心得!大家一起学习,希望对你有用.我把一些我自己的理解写在注释里了注意看!!
终码一生
2022/04/15
7090
SpringBoot整合ActiveMQ实现Queue和Topic两种模式
springboot集成ActiveMQ
1、pom依赖如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-po
麦克劳林
2018/09/11
9391
springboot集成ActiveMQ
Spring Boot整合ActiveMQ
在本地或者虚拟机中安装ActiveMQ并启动ActiveMQ服务,启动完毕之后通过浏览器来访问ActiveMQ的管理页面http://localhost:8161(这是本地安装的ActiveMQ,如果是在虚拟机中,localhost需要替换成虚拟机的IP)来确认一下服务是否正常启动,页面正常显示说明启动成功。 为了让你的Spring Boot应用支持ActiveMQ,需要在pom.xml文件中添加如下依赖:
itlemon
2020/04/03
1.5K0
Spring Boot整合ActiveMQ
SpringBoot整合ActiveMq实现Queue和Topic两种模式
一、前言 最近小编在学习消息队列,然后选中了ActiveMq,来进行学习.于是探索了好久,来整理一下自己的学习心得!大家一起学习,希望对你有用.我把一些我自己的理解写在注释里了注意看!! 二、ActiveMq的下载和使用 下载 大家直接下载解压就可以使用了---> 链接:https://pan.baidu.com/s/1W0MZtQAya0mOEKMWqJK1iA 提取码:29mz 使用 三、依赖准备 <!-- activemq --> <dependency> <grou
掉发的小王
2022/07/11
3910
SpringBoot整合ActiveMq实现Queue和Topic两种模式
SpringBoot整合ActiveMQ
此处 spring.activemq.pool.enabled=false,表示关闭连接池。
崔笑颜
2020/06/08
3950
springboot与activeMQ入门(1)
下一篇,springboot与activeMQ入门(2:主从备份,负载均衡) 说明:acitveMQ版本为:5.9.1,springboot版本为2.0.3
用户2038589
2018/09/06
5250
springboot与activeMQ入门(1)
JMS学习之路(一):整合activeMQ到SpringMVC
JMS的全称是Java Message Service,即Java消息服务。它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。对于消息的传递有两种类型,一种是点对点的,即一个生产者和一个消费者一一对应;另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
肖哥哥
2019/02/22
1.6K1
JMS学习之路(一):整合activeMQ到SpringMVC
SpringBoot整合ActiveMQ
MQ的作用在前面文章中我已经介绍过了,那么今天就教大家学习整合ActiveMQ,篇幅有点长希望大家能看完。
Java编程指南
2019/08/02
4850
SpringBoot整合ActiveMQ
SpringBoot整合 ActiveMQ快速入门 实现点对点推送
ActiveMQ是一个高性能的消息服务, 它已经实现JMS接口(Java消息服务(Java Message Service),Java平台中关于面向消息中间件的接口), 所以我们可以直接在 Java 中使用
憧憬博客
2020/07/21
1.5K0
Spring Cloud 2.x系列之springboot集成ActiveMQ
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构;是大型分布式系统不可缺少的中间件。目前使用较多的消息队列有ActiveMQ、RabbitMQ、Kafka、RocketMQ、MetaMQ等。springboot提供了对JMS系统的支持;springboot很方便就可以集成这些消息中间件。
BUG弄潮儿
2022/06/30
5840
Spring Cloud 2.x系列之springboot集成ActiveMQ
SpringBoot入门建站全系列(十七)整合ActiveMq(JMS类消息队列)
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)
品茗IT
2019/08/21
8920
ActiveMQ --- 整合篇
之前说到了activeMQ的一些基本用法,本文将介绍activeMQ如何与spring以及spring boot整合。
贪挽懒月
2019/10/22
5780
SpringBoot 整合 gradle 集成ActiveMQ
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-activemq/2.3.1.RELEASE
Java深度编程
2020/08/10
8740
SpringBoot 整合 gradle 集成ActiveMQ
SpringBoot整合ActiveMQ消息组件
1、ActiveMQ是Apache提供的开源组件,是基于JMS标准的实现组件。利用SpringBoot整合ActiveMQ组件,实现队列消息的发送与接收。修改pom.xml配置文件,追加spring-boot-starter-activemq依赖库。
别先生
2020/11/26
4080
SpringBoot整合ActiveMQ消息组件
ActiveMQ学习之SpringBoot整合ActiveMQ------>队列生产者和消费者
一、pom <!--聚合工程集成关系--> <!--统一整合第三方框架依赖信息--> <parent> <groupId>org.springframework.boot</grou
用户5899361
2020/12/07
5400
Spring Boot中集成ActiveMQ(九)
大家好,我是默语,一个专注于技术分享的博主。今天我们来聊聊 Spring Boot中集成ActiveMQ 的话题。在现代微服务架构中,消息队列(Message Queue,MQ)是一种非常重要的组件,用于实现服务间的异步通信、解耦和负载均衡。ActiveMQ是一个流行的开源消息队列实现,支持JMS(Java Message Service)规范。本文将详细介绍JMS和ActiveMQ的基础知识,如何在Spring Boot项目中集成ActiveMQ,包括依赖导入、配置、消息发送和消费的实现。通过这篇文章,您将全面掌握Spring Boot中使用ActiveMQ的技能,为您的项目添加强大的消息处理能力。让我们开始吧!🚀
默 语
2024/11/20
1760
ActiveMQ 客户端的开发
上篇文章 ActiveMQ 服务器的部署 实现了 ActiveMQ 服务器的部署,本文分别以官方 API、Spring、SpringBoot 三种方式,实现 ActiveMQ 消息的生成者和消费者。
IT技术小咖
2019/06/26
8660
ActiveMQ学习之SpringBoot整合ActiveMQ------>主题生产者和消费者
一、pom <!--聚合工程集成关系--> <!--统一整合第三方框架依赖信息--> <parent> <groupId>org.springframework.boot</grou
用户5899361
2020/12/07
3470
相关推荐
springboot整合ActiveMQ1(基本使用)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验