关于SpringCloud Bus RemoteApplicationEvent 使用注意事项
最近使用SpringCloud Bus 用于服务直接消息通信,遇到一些问题,记录下来给一样碰到问题的你一个解决方案
开发环境 :
- springboot 2.3.9.RELEASE
- spring-cloud-alibaba-starters 2.2.5.RELEASE
- rabbitmq
问题一:消息publishEvent出去,监听服务收不到消息
监听服务的类没有注入到spring容器中,未加RemoteApplicationEventScan注解扫描自定义的Event对象,配置加入以下即可


消息发送的时候originService传入的服务id和springcloud bus的不一致
在spring-cloud-bus包中的BusAutoConfiguration配置信息可以看到,发送消息时会匹配serviceId,配置一致才发送,而默认情况下bus会自动生成一个serviceId,如果我们发送的时候用的是自己随便定义的id,则无法发送消息。

建议在配置文件中配置busId,然后从BusProperties类中获取。这样就保证了二者一致

获取配置的bus id

消息发送者和接收者的rabbitmq消息序列化配置不一致
默认情况下,rabbitmq有自己的消息序列化规则,由于我在消息发送服务配置过rabbitmq的序列化为json格式,但是接收服务没有使用的默认的格式,导致消息发出去之后,接收服务无法正确反序列化,导致消息消费失败。所以要么就都不配置,要么所有服务都配置

问题二:消息发送成功,监听服务也收到消息,但是Event的source字段为空。
这个问题困扰了我很久,明明source字段传了值,但是别的服务就是拿不到,而且发送服务自己创建监听服务,是能拿到的。经过查询离职发现,RemoteApplicationEvent的烦序列化的时候忽略了source,也就是说就算你传值了,也不会处理,可能是怕使用者传的数据大?

解决办法,自定义Event的时候可以自定义参数进行传值。

结果如下,是可以拿到参数的

关于SpringCloud Bus RemoteApplicationEvent 使用注意事项的更多相关文章
- SpringCloud Bus消息总线
在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线. SpringCloud中也有对应的解决方案 ...
- 带你入门SpringCloud 之 通过SpringCloud Bus 自动更新配置
前言 在<带你入门SpringCloud统一配置 | SpringCloud Config>中通过 SpringCloud Config 完成了统一配置基础环境搭建,但是并没有实现配置修改 ...
- SpringCloud学习笔记(八、SpringCloud Bus)
目录: 什么是bus消息总栈 如何使用bus消息总栈 什么是bus消息总栈 SpringCloud Bus使用轻量的消息代理连接分布式系统的各个节点,可以用于系统状态变更时的广播(如配置变更)或其它管 ...
- SpringCloud全家桶学习之消息总线---SpringCloud Bus
一.概述 ConfigClient(微服务)从ConfigServer端获取自己对应的配置文件,但是目前的问题是:当远程git仓库配置文件发生改变时,每次都是需要重启ConfigCient(微服务), ...
- SpringCloud Bus消息总线简介
简介: SpringCloud Bus配合SpringCloud Config使用可以实现配置的动态刷新 SpringCloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了 ...
- SpringCloud Bus 动态刷新全局广播和定点通知
全局广播 前提: 先具备良好的 RabbitMQ 环境 1. 演示广播效果,增加复杂度,再以3355为模板再制做一个3366模块 <!--pom.xml--> <?xml versi ...
- 物联网架构成长之路(17)-SpringCloud目前遇到的注意事项
1. STS插件最好是要安装的. 2. 对应的Decompiler插件也是要安装的. 3. 如果遇到maven工程因为找不到包问题的, 在确认pom.xml 文件没有问题的情况下, 右键项目-Mave ...
- springcloud - bus
在重新设置了后的bootstrap.yml和application.yml后,可以看到bus-refresh的端点请求了.在之前bootstrap也可以设定哪个端点是可见,哪个未见. 如: #actu ...
- SpringCloud系列——Bus 消息总线
前言 SpringCloud Bus使用轻量级消息代理将分布式系统的节点连接起来.然后可以使用此代理广播状态更改(例如配置更改)或其他管理指令.本文结合RabbitMQ+GitHub的Webhook实 ...
- SpringCloud入门 消息总线 Bus
消息总线 1.概述 使用SpringCloud Bus配和Spring Cloud Config使用实现配置的动态刷新 Bus只支持消息处理:RabbitMQ和Kafaka. 能干嘛 能管理和传播分布 ...
随机推荐
- 音视频-YUV数据格式
一.YUV格式 1)kCVPixelFormatType_420YpCbCr8PlanarFullRange = 'f420' 对应YUV I420格式 2)kCVPixelFormatType_42 ...
- [SWPUCTF 2021 新生赛]easy_sql
这道题呢就是很简单的sql注入,我们直接用sqlmap来跑. 首先我们打开页面可以看见提示,参数为wllm **然后我们启动虚拟机,输入sqlmap的命令:sqlmap -u "url地址/ ...
- Unity3D 内存管理非代码技巧
在场景管理器新建 gameobjct 使用代码在类初始化时 NEW 普肉fai包(包)然后将相同的类NEW够挂载到 gameobjct子节点上 在操控列表中类的时候用for循环遍历操作移动还是怎么样( ...
- 什么是JDBC,在上面时候会用到它?
JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库.JDBC接口及相关类在java.sql包和javax.sql包里.我们可以用 ...
- 一个常见的 JavaScript 解构陷阱
在日常的 JavaScript 编码中,我们经常使用解构语法来提取对象中的属性.假设我们有一个名为 fetchResult 的对象,代表从接口返回的数据,其中包含一个字段名为 data. const ...
- java对列表分页的方法,及mysql分页的sql原型
java对列表分页的方法,及mysql分页的sql原型 1.mysql * mysql分页查询: * select <include refid="Base_Column_List&q ...
- C# 循环枚举
foreach (int eemun in Enum.GetValues(typeof(类名))) { string sName = Enum.GetName(typeof(类名), eemun);/ ...
- 数据库阻塞查询语句 SQL SERVER
--查询CPU占用最高的SQL语句 SELECT total_worker_time/execution_count AS avg_cpu_cost, plan_handle, execution_c ...
- Android ADB命令集锦
Android ADB命令集锦 原文(有删改):https://blog.csdn.net/dianziagen/article/details/57400723 本文包括: adb基本指令 Shel ...
- QT学习:10 IO类
--- title: framework-cpp-qt-10-IO类 EntryName: framework-cpp-qt-10-QIODevice date: 2020-04-17 10:24:0 ...