您的位置:首页 > 编程语言 > Java开发

Spring Cloud构建微服务架构:消息驱动的微服务(消费分区)【Dalston版】

2018-02-05 00:00 781 查看
通过上一篇《消息驱动的微服务(消费组)》的学习,我们已经能够在多实例环境下,保证同一消息只被一个消费者实例进行接收和处理。但是,对于一些特殊场景,除了要保证单一实例消费之外,还希望那些具备相同特征的消息都能够被同一个实例进行消费。这时候我们就需要对消息进行分区处理。


使用消息分区

在Spring Cloud Stream中实现消息分区非常简单,我们可以根据消费组示例做一些配置修改就能实现,具体如下:在消费者应用 
SinkReceiver
中,我们对配置文件做一些修改,具体如下:

spring.cloud.stream.bindings.input.group=Service-A




spring.cloud.stream.bindings.input.destination=greetings


spring.cloud.stream.bindings.input.consumer.partitioned=true


spring.cloud.stream.instanceCount=2


spring.cloud.stream.instanceIndex=0


从上面的配置中,我们可以看到增加了这三个参数:
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.destination=greetings


spring.cloud.stream.bindings.output.producer.partitionKeyExpression=payload


spring.cloud.stream.bindings.output.producer.partitionCount=2


从上面的配置中,我们可以看到增加了这两个参数:
spring.cloud.stream.bindings.output.producer.partitionKeyExpression
:通过该参数指定了分区键的表达式规则,我们可以根据实际的输出消息规则来配置SpEL来生成合适的分区键;
spring.cloud.stream.bindings.output.producer.partitionCount
:该参数指定了消息分区的数量。

到这里消息分区配置就完成了,我们可以再次启动这两个应用,同时消费者启动多个,但需要注意的是要为消费者指定不同的实例索引号,这样当同一个消息被发给消费组时,我们可以发现只有一个消费实例在接收和处理这些相同的消息。博客原文:http://blog.didispace.com/spring-cloud-starter-dalston-7-4/本文内容部分节选自我的《Spring Cloud微服务实战》

但对依赖的Spring Boot和Spring Cloud版本做了升级。更多Spring Cloud干货戳 ==> 这里


推荐阅读

微服务2017年度报告出炉:4大客户画像,15%传统企业已领跑
Netflix 的上线工具 Spinnaker
Dubbo将积极适配Spring Cloud生态Spring Cloud微服务架构汇总浅谈微服务基建的逻辑
Service Mesh:下一代微服务
微服务(Microservices)【翻译】那些没说出口的研发之痛,做与不做微服务的几大理由
长按指纹一键关注




点击 “阅读原文” 看看本号其他精彩内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐