Spring Cloud 学习笔记 ——Spring Cloud Stream 消息分组

消息分组

默认情况下,如果消费者是一个集群,此时,一条消息会被多次消费。

java -jar stream2-0.0.1-SNAPSHOT.jar
java -jar stream2-0.0.1-SNAPSHOT.jar --server.port=8081
  • 通过不同端口,运行两个服务
    在这里插入图片描述
    在这里插入图片描述

  • 访问其中一个服务的 hello 接口,会给队列中发送 “hello spring cloud stream!” 的消息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 可以看到两个服务都收到了这条消息,可以说是重复消费了,重复消费可能违背一些实际业务问题,比如收到这条消息会触发一个动作,而这个动作执行一次就够了(比如转账,这个只是举例),这时候就需要一个集群去处理一次的需求。

通过消息分组可以解决这个问题

  • 在 application.properties 中配置分组 javaboy-group
spring.cloud.stream.bindings.javaboy-input.group=javaboy-group
spring.cloud.stream.bindings.javaboy-output.group=javaboy-group

在这里插入图片描述

  • 然后重新打包,启动不同端口的服务,访问 hello 接口
    在这里插入图片描述
  • 启动命令与刚才的一样,启动完服务如下:
    在这里插入图片描述
    在这里插入图片描述
  • 访问 hello 接口
    在这里插入图片描述
    在这里插入图片描述
    可以看到,通过分组,在 RabbitMQ 消费者集群中,可以使得消息从每个服务都消费一次变为一个集群之中只有一个服务会消费。这就是消息分组的作用
  • 我们再次放 hello 接口
    在这里插入图片描述

在这里插入图片描述
我们简单的再次测试,这是 8081 端口的服务收到消息,8080 端口的服务没有收到消息,只有上一次的消息,我们重复访问的时候发现,消息会被两个服务轮询消费,这种情况可能是 Spring Cloud 做了负载均衡,也可能不是,不能确定,但是消息的确在两个服务中只被消费一次了。这就是消息分组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值