• 关于SpringCloud Bus RemoteApplicationEvent 使用注意事项


    最近使用SpringCloud Bus 用于服务直接消息通信,遇到一些问题,记录下来给一样碰到问题的你一个解决方案

    开发环境 :

    • springboot 2.3.9.RELEASE
    • spring-cloud-alibaba-starters 2.2.5.RELEASE
    • rabbitmq

    问题一:消息publishEvent出去,监听服务收不到消息

    • 监听服务的类没有注入到spring容器中,未加RemoteApplicationEventScan注解扫描自定义的Event对象,配置加入以下即可

    image


    image

    • 消息发送的时候originService传入的服务id和springcloud bus的不一致

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

    image

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

    • 消息发送者和接收者的rabbitmq消息序列化配置不一致

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


    问题二:消息发送成功,监听服务也收到消息,但是Event的source字段为空。

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

    image

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

    image

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

    image

  • 相关阅读:
    第四周
    第二次作业
    jsp
    软件测试第一次
    增删改查
    用户添加
    登录
    购物商城
    jsp第七周作业
    jsp第六周作业
  • 原文地址:https://www.cnblogs.com/lwjQAQ/p/15904047.html
Copyright © 2020-2023  润新知