SpringCloud-stream一体化MQ解决方案-消费分区

本文详细介绍了SpringCloud-Stream如何实现MQ分区,包括官方文档、分区概念、生产者与消费者的重要配置,以及两种分区搭建方式。通过具体案例展示了直接指定消息分区和自定义消息与分区对应关系的方法。
摘要由CSDN通过智能技术生成

 参考资料:

参考demo

参考视频1 

参考视频2

官方文档(推荐)

官方文档中文版


关于Kafka和rabbitMQ的安装教程,见本人之前的博客

rocketMq的安装教程

rocketMq仪表盘安装教程


 重!!!

 个人整理SpringCloud-Stream各部分概念、配置方法、配置项大全

 Stream基本配置(Kafka、RabbitMQ和RocketMQ)

Stream消费者组(解决Kafka消费者组只有一个消费者的问题)


相关说明及注意事项:

  • springcloud-stream是springCloud的一项功能,所以需要和springBoot有严格的版本对应关系参照
  • 上述参考demo中有单个服务的搭建方式,也有多个微服务的搭建方式

​​​

  • 且git仓库并没有出现中文乱码的情况,下载到本地出现中文乱码注意编码格式

 ​​​


分区概念:

1.官方介绍

 2.Stream分区介绍

  • 上篇文章已经讲了消费组默认以轮询的方式消费交换机中的消息

  • 但是在生产实践中,我们需要特性的消费者(组)消费特定的消息,这就需要进行分区处理

  •  可以看到,在配置分区后,实现了特定的消费者(组)对特定的消息进行消费

3.生产者重要配置说明

  • Stream消息分区有两种方式:
消息分区方式 优点 缺点
比较固定的消息和分区对应关系 配置简单 对应关系比较固定
自定义的消息和分区对应关系 配置较多 对应关系完全可以自定义
  • 比较固定的消息和分区对应关系配置方式
  • ①、如果是Kafka的话,在创建Binder实例中,开启自动创建分区机制,其他的MQ不用,具体参照概念篇的Binders部分
#这句话一定要添加 因为默认是关闭的
spring.cloud.stream.binders.mykafka.environment.spring.cloud.stream.kafka.binder.auto-add-partitions=true

  •  ②、生产者Binding阶段规定分区数量以及发送的消息与分区的对应关系,关键字为
partition-count  和  partition-key-expression
  •   具体参照,官方引文文档:Learn标签选择对应版本说明文档→overview→Configuration Options(Binding Properties(Producer Properties))

Learn标签选择对应版本说明文档

​​

 overview

​​

Configuration Options(Binding Properties(Producer Properties))

  • ③、其中partition-count后面跟对应地分区数量即可,而partition-key-expression则有三种对应方式:1)直接指定消息分区的方式;2)按照消息的实体类型进行分区,如String,User,Role等;3)按照消息的header相同key的不通value进行分区

1)直接指定消息分区的方式

        使用partition-key-expression指定生产者要发送到的消息分区,value类型为int,范围为[0,partition-count-1],这种方式很不灵活,适用范围较小。

spring.cloud.stream.bindings.output.producer.partition-count=2
#如果是数字的话 表示 发送到分区的编号 从0开始 最大值为 partitionCount-1
spring.cloud.stream.bindings.output.producer.partition-key-expression=0

 2)按照消息的实体类型进行分区,如String,User,Role等

        使用partition-key-expression的值设置为payload,系统会默认根据消息的实体类型进行分区(分区的数量应该和生产者发送消息的实体类型数量一致)


spring.cloud.stream.bindings.mykafka_output01.producer.partition-count=2
#如果值是 payload,将会使用放在payload的实体类型作为分区依据,可以为自定义类型比如 User,Role 等等。
spring.cloud.stream.bindings.mykafka_output01.producer.partition-key-expression=payload

 3)按照消息的header相同key的不通value进行分区

        使用partition-key-expression的值设置为headers['<headerKey>'],系统会默认根据消息的Header相同的Key值不同的value值进行分区(分区的数量应该和生产者发送消息Header相同key的value数量一致)


spring.cloud.stream.bindings.mykafka_output02.producer.partition-count=2
#如果值是 headers,将会使用放在header的key值作为分区依据
spring.cloud.stream.bindings.mykafka_output02.producer.partition-key-expression=headers['selfKey']

 

  •  自定义的消息和分区对应关系的配置方式
  • ①、 如果是Kafka的话,在创建Binder实例中,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PH = 7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值