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月前
|
XML Java 数据格式
Spring框架入门:IoC与DI
【5月更文挑战第15天】本文介绍了Spring框架的核心特性——IoC(控制反转)和DI(依赖注入)。IoC通过将对象的创建和依赖关系管理交给容器,实现解耦。DI作为IoC的实现方式,允许外部注入依赖对象。文章讨论了过度依赖容器、配置复杂度等常见问题,并提出通过合理划分配置、使用注解简化管理等解决策略。同时,提醒开发者注意过度依赖注入和循环依赖,建议适度使用构造器注入和避免循环引用。通过代码示例展示了注解实现DI和配置类的使用。掌握IoC和DI能提升应用的灵活性和可维护性,实践中的反思和优化至关重要。
38 4
|
7天前
|
消息中间件 存储 前端开发
RabbitMQ在Java中的完美实现:从入门到精通
本文由木头左介绍如何在Java项目中使用RabbitMQ。RabbitMQ是开源的AMQP实现,支持多种客户端,适合分布式系统中的消息传递。首先需安装Erlang和RabbitMQ,接着在Java项目中添加RabbitMQ客户端库依赖。通过创建连接工厂和连接,建立与RabbitMQ的通信,并展示了创建连接和通道的代码示例。
|
10天前
|
XML 存储 Java
Spring 6(一)【Spring 入门】
Spring 6(一)【Spring 入门】
|
12天前
|
Java 数据库连接 数据库
Spring日志完结篇,MyBatis操作数据库(入门)
Spring日志完结篇,MyBatis操作数据库(入门)
|
13天前
|
存储 自动驾驶 Java
Spring IoC&DI(1)—入门
Spring IoC&DI(1)—入门
13 1
|
13天前
|
JSON 前端开发 Java
Spring Web MVC入门(3)——响应
Spring Web MVC入门(3)——响应
15 1
|
13天前
|
存储 前端开发 Java
Spring Web MVC入门(2)——请求(下)
Spring Web MVC入门(2)——请求
19 0
|
13天前
|
JSON 前端开发 Java
Spring Web MVC入门(2)——请求(上)
Spring Web MVC入门(2)——请求
12 0
|
13天前
|
设计模式 前端开发 Java
Spring Web MVC入门(1)
Spring Web MVC入门(1)
12 0
|
22天前
|
Java API 网络架构
利用Java Spring Boot构建微服务架构的实践探索
随着业务复杂性的增长和互联网技术的飞速发展,微服务架构已成为现代软件开发中不可或缺的一部分。本文旨在探讨如何利用Java Spring Boot框架构建微服务架构,包括微服务的定义、优势,以及通过实际案例展示如何设计、开发和部署微服务。我们将关注服务拆分、服务间通信、数据一致性、服务治理等核心问题,并探讨如何结合Spring Cloud生态中的组件来实现高效、可靠的微服务架构。

热门文章

最新文章