spring-cloud-stream 整合rabbitmq 消息分组

如果有多个消息消费者,那么消息生产者发送的消息会被多个消费者都接收到,这种情况在某些实际场景下是有很大问题的,比如在如下场景中,订单系统做集群部署,都会从 RabbitMQ 中获取订单信息,如果一个订单消息同时被两个服务消费,系统肯定会出现问题。为了避免这种情况,Stream 提供了消息分组来解决该问题

å¨è¿éæå¥å¾çæè¿°

在 Stream 中处于同一个 group 中的多个消费者是竞争关系,能够保证消息只会被其中一个应用消费。不同的组是可以消费的,同一个组会发生竞争关系,只有其中一个可以消费。通过 spring.cloud.stream.bindings..group 属性指定组名。


主要是修改application.yml的配置文件,为方便演示,在以下Demo中修改扩展
https://blog.csdn.net/qq_41712271/article/details/118189305
将消息消费者工程,再完全复制一个,修改里面的端口号和应用程序名即可

服务介绍
stream-group-sender消息发送者服务
stream-group-receiverA消息接收者服务
stream-group-receiverB消息接收者服务

通过结果可以看到消息被两个消费者同时消费了,原因是因为它们属于不同的分组,默认情况下分组名称是随机生成的

简单说,生产者发送10条,两个消费者都会收到10条

通过 RabbitMQ 也可以得知:


配置分组

分别修改两个消费者工程的application.yml文件

spring:
  cloud:
    stream:
      bindings:
        # 消息接收通道
        smsEmail_in:
          destination: sourceMsg # 绑定的交换机名称
          group: A

此时多个消息消费者只有其中一个可以消费(同一个group,多个消费者之间是竞争的关系)。

简单说,生产者发送10条,其中一个消费者收到4条,另一个消费者可能收到6条

RabbitMQ 结果如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值