Spring Cloud Stream分区分组原理图解
文件大小: 215k
源码售价: 10 个金币 积分规则     积分充值
资源说明:Spring Cloud Stream分区分组原理图解 在分布式系统中,消息队列是非常重要的一种架构组件,用于实现系统之间的解耦和异步处理。Spring Cloud Stream是一个基于Spring Boot的消息队列框架,提供了多种消息队列的支持,包括RabbitMQ、Kafka、Amazon SQS等。今天,我们将详细介绍Spring Cloud Stream的分区和分组机制。 分区机制 -------- 在生产环境中,我们的每个服务都不会以单节点的方式运行。当同一个服务启动多个实例的时候,这些实例都会绑定到同一个消息通道的目标主题(Topic)上。默认情况下,当生产者发出一条消息到绑定通道上,这条消息会产生多个副本被每个消费者实例接收和处理。 然而,在有些业务场景之下,我们希望生产者产生的消息只被其中一个实例消费。这时候我们需要为这些消费者设置消费组来实现这样的功能。当把消费者复制一份,发现2个都能收到消息2个消费者都加入同一个消费者发现只有一个能收到消息。 分区机制的配置 ------------- 从上面的配置中,我们可以看到增加了这两个参数: 1. `spring.cloud.stream.bindings.output.producer.partitionKeyExpression`:通过该参数指定了分区键的表达式规则,我们可以根据实际的输出消息规则来配置SpEL来生成合适的分区键; 2. `spring.cloud.stream.bindings.output.producer.partitionCount`:该参数指定了消息分区的数量。 到这里消息分区配置就完成了,我们可以再次启动这两个应用,同时消费者启动多个,但需要注意的是要为消费者指定不同的实例索引号,这样当同一个消息被发给消费组时,我们可以发现只有一个消费实例在接收和处理这些相同的消息。 分组机制 -------- 在有些场景下,我们需要满足同一个特征的数据被同一个实例消费,例如同一个id的传感器监测数据必须被同一个实例统计计算分析,否则可能无法获取全部的数据。又比如部分异步任务,首次请求启动task,二次请求取消task,此场景就必须保证两次请求至同一实例。 在Spring Cloud Stream中,我们可以使用消费组来实现这个功能。当我们设置了消费组后,只有一个消费实例能够接收和处理消息,其他实例则不能接收到该消息。 总结 ---- Spring Cloud Stream的分区和分组机制提供了一种灵活的方式来实现消息队列的负载均衡和路由。通过配置分区键和消费组,我们可以控制消息的路由和消费,满足不同的业务场景需求。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。