潍坊企业网站模板,wordpress弹登陆界面,网站开发基本语言,可以做硬件外包项目的网站通过上一篇《消息驱动的微服务#xff08;消费组#xff09;》的学习#xff0c;我们已经能够在多实例环境下#xff0c;保证同一消息只被一个消费者实例进行接收和处理。但是#xff0c;对于一些特殊场景#xff0c;除了要保证单一实例消费之外#xff0c;还希望那些具… 通过上一篇《消息驱动的微服务消费组》的学习我们已经能够在多实例环境下保证同一消息只被一个消费者实例进行接收和处理。但是对于一些特殊场景除了要保证单一实例消费之外还希望那些具备相同特征的消息都能够被同一个实例进行消费。这时候我们就需要对消息进行分区处理。 使用消息分区
在Spring Cloud Stream中实现消息分区非常简单我们可以根据消费组示例做一些配置修改就能实现具体如下
在消费者应用SinkReceiver中我们对配置文件做一些修改具体如下
spring.cloud.stream.bindings.input.groupService-Aspring.cloud.stream.bindings.input.destinationgreetingsspring.cloud.stream.bindings.input.consumer.partitionedtruespring.cloud.stream.instanceCount2spring.cloud.stream.instanceIndex0从上面的配置中我们可以看到增加了这三个参数
spring.cloud.stream.bindings.input.consumer.partitioned通过该参数开启消费者分区功能 spring.cloud.stream.instanceCount该参数指定了当前消费者的总实例数量 spring.cloud.stream.instanceIndex该参数设置当前实例的索引号从0开始最大值为spring.cloud.stream.instanceCount参数 - 1。我们试验的时候需要启动多个实例可以通过运行参数来为不同实例设置不同的索引值。
在生产者应用SinkSender中我们对配置文件也做一些修改具体如下
spring.cloud.stream.bindings.output.destinationgreetingsspring.cloud.stream.bindings.output.producer.partitionKeyExpressionpayloadspring.cloud.stream.bindings.output.producer.partitionCount2从上面的配置中我们可以看到增加了这两个参数
spring.cloud.stream.bindings.output.producer.partitionKeyExpression通过该参数指定了分区键的表达式规则我们可以根据实际的输出消息规则来配置SpEL来生成合适的分区键 spring.cloud.stream.bindings.output.producer.partitionCount该参数指定了消息分区的数量。
到这里消息分区配置就完成了我们可以再次启动这两个应用同时消费者启动多个但需要注意的是要为消费者指定不同的实例索引号这样当同一个消息被发给消费组时我们可以发现只有一个消费实例在接收和处理这些相同的消息。
以下专题教程也许您会有兴趣
Spring Boot基础教程Spring Cloud基础教程
本文内容部分节选自我的《Spring Cloud微服务实战》稍作改变和内容升级