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方法来执行。

实验链接:https://developer.aliyun.com/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
相关文章
|
1月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
2月前
|
存储 安全 Java
SpringBoot搭建Spring Security 入门
SpringBoot搭建Spring Security 入门
114 0
|
18天前
|
前端开发 Java 数据库连接
Spring系列文章1:Spring入门程序
Spring系列文章1:Spring入门程序
|
3天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
3天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
9天前
|
消息中间件 监控 负载均衡
RocketMQ实践问题收集
RocketMQ实践问题收集
|
12天前
|
消息中间件 供应链 Java
RabbitMQ入门指南(九):消费者可靠性
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了消费者确认机制、失败重试机制、失败处理策略、业务幂等性等内容。
28 0
RabbitMQ入门指南(九):消费者可靠性
|
12天前
|
消息中间件 存储 Java
RabbitMQ入门指南(八):MQ可靠性
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了MQ数据持久化、LazyQueue模式、管理控制台配置Lazy模式、代码配置Lazy模式、更新已有队列为lazy模式等内容。
39 0
|
12天前
|
消息中间件 微服务
RabbitMQ入门指南(四):交换机与案例解析
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了交换机在RabbitMQ中的作用与类型、交换机案例(Fanout交换机、Direct交换机、Topic交换机)等内容。
23 0
|
12天前
|
消息中间件 存储 数据库
RabbitMQ入门指南(二):架构和管理控制台的使用
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了RabbitMQ架构和管理控制台的使用等内容。
34 0
RabbitMQ入门指南(二):架构和管理控制台的使用