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

消息分区

通过上一次Spring Cloud 学习笔记 ——Spring Cloud Stream 消息分组,可以使 RabbitMQ 消费者集群中的消息只会被消费一次,如果想相同特征的消息总是被集群中的固定的一个服务消费,该如何配置呢?可以通过消息分区来解决这个问题
注意消息分区要在消息分组的基础之上操作

  • 配置 application.properties
# 消费者的配置
# 开启消息分区,
spring.cloud.stream.bindings.javaboy-input.consumer.partitioned=true
# 消费者实例的个数
spring.cloud.stream.instance-count=2
# 当前实例的下标
spring.cloud.stream.instance-index=0

# 生产者的配置
# 设置消息发给下标为 1 的消费者服务
spring.cloud.stream.bindings.javaboy-output.producer.partition-key-expression=1
# 消费端节点的数量
spring.cloud.stream.bindings.javaboy-output.producer.partition-count=2

在这里插入图片描述
spring.cloud.stream.instance-index=0设置了当前服务的下标是 0 ,spring.cloud.stream.bindings.javaboy-output.producer.partition-key-expression=1设置生产者发送给实例的下标是 1 的消费者,一共是 0 ,一共是 1,默认服务应该是不会收到消息的

  • 打包
    在这里插入图片描述
  • 启动,不同端口和不同消费者下标的服务命令
java -jar stream2-0.0.1-SNAPSHOT.jar
java -jar stream2-0.0.1-SNAPSHOT.jar --server.port=8081 --spring.cloud.stream.instance-index=1

在这里插入图片描述
在这里插入图片描述

  • 访问多次 hello 端口,观察两个服务的控制台
    在这里插入图片描述
    在这里插入图片描述
    一共访问了 10 次,所有的消息都被 8081 消费了,8081 中的 true 只是 hello 接口对应的 Controller 打印的内容:
    在这里插入图片描述
    证实了猜想,默认的服务不会消费消息。 10 次的消息全部被 8081 也就是spring.cloud.stream.bindings.javaboy-output.producer.partition-key-expression=1下标为 1 的服务收到了。这是固定了消费者是谁,然后消息总是被这个消费者消息,这就是消息分区。在消息分组的基础上,指定消息被 RabbitMQ 消息者集群中的哪个服务消费
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值