Spring-cloud-bus-rocketmq入门与实践

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 本场景带您体验如何在 Spring 生态中优雅地使用 Apache RocketMQ,感受最受欢迎业务开发框架与最受欢迎消息平台结合的魅力。

Spring-cloud-bus-rocketmq入门与实践

1. 创建资源

开始实验之前,您需要先创建ECS实例资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。

说明 资源创建过程需要1~3分钟。


2. 启动名称服务器和代理

  1. 本步骤指导您如何在已搭建好RocketMQ实例中启动名称服务器和代理。
  2. 执行如下命令,切换目录至rocketmq-4.9.3/bin下。
cd /root/rocketmq-4.9.3/bin
  1. 执行如下命令,启动服务器。

说明 按CTRL+C可结束当前进程。

nohup sh mqnamesrv &

tail -f ~/logs/rocketmqlogs/namesrv.log

若启动代理失败,解决方案如下。

  1. 执行如下命令,查看 mqnamesrv 进程。
ps -ef |grep mqnamesrv

  1. 执行如下命令,清除掉该进程(该命令进程编号以上图示例)。
kill -9 6987
  1. 执行如下命令,清除Java进程。
sh mqshutdown namesrv
sh mqshutdown broker

  1. 执行如下命令,启动代理。

说明 按CTRL+C可结束当前进程。

nohup sh mqbroker -n localhost:9876 &

tail -f ~/logs/rocketmqlogs/broker.log

  1. 执行如下命令,创建topic。
cd /root/rocketmq-4.9.3/bin
./mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t springCloudBus


3. 启动 java 工程

本步骤指导您如何启动java工程。

  1. 执行如下命令,启动Java工程。

说明 首次运行可能要花费3分钟左右的编译时间。

cd /root/spring-mq-bus-demo
mvn install -Dmaven.test.skip
java -jar target/demo-0.0.1-SNAPSHOT.jar

启动成功,返回信息如下。

  1. 单击当前页面右上角,再开启一个会话窗口,进行响应测试。


4. 访问并测试执行效果

本步骤指导您如何进行测试,并查看其相应效果。

  1. 测试一。

执行如下命令,向刚才启动的程序发送一条简单的请求,以观察响应。

wget 127.0.0.1:8888/bus/event/publish/user?name=RocketMQ2

再观察会话1中的日志,会观察到如下的输出。

  1. 测试二。

执行如下命令,向刚才启动的程序发送一条简单的请求,以观察响应。

wget 127.0.0.1:8888/bus/event/publish/user?name=RocketMQ&destination=bus

再观察会话1中的日志,会观察到如下的输出。

说明 第二次测试没有触发回调,原因是传递destination参数。至于为什么没有触发这里不详细说明。有兴趣的请看org.springframework.cloud.bus.ServiceMatcher.isForSelf方法与AntPathMatcher类。


5. 代码详解

本步骤将对所使用的代码进行讲解。

  1. maven配置。

说明 下面的配置代码,都可以在pom.xml中找到。

通过引入 spring-cloud-alibaba 的 pom 依赖来解决所有版本声明工作。

然后,再引入 spring-cloud-starter-bus-rocketmq

  1. 配置文件。

application.properties中,各个配置介绍如下。

  1. server.port=8080(web服务端口)。
  2. spring.cloud.bus.trace.enabled=true(启动trace级别日志)。
  3. pring.cloud.bus.id=${spring.application.name}-{IP}:${server.port}(spring.cloud.bus.id 是设定这个实例的在进群唯一标识符。建议使用下面的规则。${项目名}:${服务端口},也可以使用dubbo的端口,最好是本机ip地址)。
  4. spring.cloud.stream.rocketmq.binder.name-server=127.0.0.1:9876(配置spring-cloud-bus需要的stream实现,使用了rocketmq)。
  5. 使用RemoteApplicationEventScan注解启动bus。

在 spring 的启动类中,加入 RemoteApplicationEventScan 注解,其目的是帮助 spring 可以自动扫描到各个配置类。

说明 "com.alibaba.cloud.examples.rocketmq" 是事件类所在的上级包名。

样例代码如下。

说明 或者,也可以参考实例工程的 RocketMQBusApplication 类

  1. 创建消息总线事件类。

注意 创建的事件必须继承RemoteApplicationEvent。

参考 UserRemoteApplicationEvent 类。

  1. 发送事件。

使用ApplicationEventPublisher对象发送事件。直接调用publishEvent方法传递需要广播的事件参见代码 RocketMQBusApplication。

  1. 接收事件。
  1. 在方法上使用EventListener注解,方法形参是接收的事件就行了。
  2. class上必须加上Component注解或者它的子注解(Controller,Service,Repository,RestController)。
  3. AckRemoteApplicationEvent事件触发点是发送事件的服务收到消息总线广播的广播就会触发AckRemoteApplicationEvent事件,建议大家处理AckRemoteApplicationEvent事件,实现重复机制。


6. 源码及本地测试

您可以通过 https://gitee.com/theonefx/spring-mq-bus-demo.git 这个git 地址来获得当前实验所用到的工程

请直接打开RocketMQBusApplication.java。并且执行RocketMQBusApplication的main方法来执行。

实验链接:/adc/scenario/482711a72ec146ed9dd2ea7f4221dd43

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5天前
|
Java 开发者 Spring
深入理解 Spring Boot 中的 @EnableAutoConfiguration 注解:概念与实践
【4月更文挑战第21天】在 Spring Boot 项目中,@EnableAutoConfiguration 注解是实现自动配置的核心,它可以根据项目的依赖和配置,自动地配置 Spring 应用程序中的 Bean
35 3
|
5天前
|
Java API 网络架构
深入理解 Spring Boot 中的 @RestController 注解:概念与实践
【4月更文挑战第20天】在现代Web开发中,创建RESTful服务已成为常态。Spring Boot通过提供@RestController注解,极大简化了REST API的开发过程。本篇博客旨在详细介绍@RestController的概念、优势以及在Spring Boot项目中的具体应用方法。
32 8
|
5天前
|
XML Java 数据格式
Spring框架入门:IoC与DI
【5月更文挑战第15天】本文介绍了Spring框架的核心特性——IoC(控制反转)和DI(依赖注入)。IoC通过将对象的创建和依赖关系管理交给容器,实现解耦。DI作为IoC的实现方式,允许外部注入依赖对象。文章讨论了过度依赖容器、配置复杂度等常见问题,并提出通过合理划分配置、使用注解简化管理等解决策略。同时,提醒开发者注意过度依赖注入和循环依赖,建议适度使用构造器注入和避免循环引用。通过代码示例展示了注解实现DI和配置类的使用。掌握IoC和DI能提升应用的灵活性和可维护性,实践中的反思和优化至关重要。
19 4
|
5天前
|
NoSQL Java MongoDB
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
【5月更文挑战第11天】本文介绍了如何将非关系型数据库MongoDB与Spring Boot框架集成,以实现高效灵活的数据管理。Spring Boot简化了Spring应用的构建和部署,MongoDB则以其对灵活数据结构的处理能力受到青睐。集成步骤包括:添加MongoDB依赖、配置连接信息、创建数据访问对象(DAO)以及进行数据操作。通过这种方式,开发者可以充分利用两者优势,应对各种数据需求。在实际应用中,结合微服务架构等技术,可以构建高性能、可扩展的系统。掌握MongoDB与Spring Boot集成对于提升开发效率和项目质量至关重要,未来有望在更多领域得到广泛应用。
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
|
5天前
|
安全 Java 数据库连接
在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通
在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通
|
5天前
|
消息中间件 安全 Java
探索|Spring并行初始化加速的思路和实践
作者通过看过的两篇文章发现实现Spring初始化加速的思路和方案有很多类似之处,通过本文记录一下当时的思考和实践。
|
5天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
5天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
5天前
|
消息中间件 监控 负载均衡
RocketMQ实践问题收集
RocketMQ实践问题收集
|
5天前
|
消息中间件 Docker 微服务
RabbitMQ入门指南(十一):延迟消息-延迟消息插件
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了DelayExchange插件、延迟消息插件实现延迟消息等内容。
63 0
http://www.vxiaotou.com