前言
本小结学习一下Spring Cloud Stream 集成 Rabbit MQ 并实现业务场景中的消息分组与消息确认。
在实现应用案例之前,我们先来了解一下一个经典的RabbitMQ的工作流程和一些特殊的业务场景:
-
RabbitMQ经典工作流程
-
业务场景
-
一般业务场景
Rabbit MQ比较常用的业务场景就是在使用生产者/消费者模式来实现通信时,生产者与消费者的实例都为唯一且一一对应时,我们便可以不用考虑消息分组且不被多个实例重复消费。 -
特殊业务场景
在一些较为复杂的分布式系统中,生产者对应着多个消费者,且一组消费者又有多个实例,此时我们将必须格外注意消费不被重复消费的问题,而且事实上在这样的业务场景中我们也应当务必做到一条消息只能被某组消费者的某个实例消费,其他的实例无法重复消费该消息。正如上图所示,对于Channel Queue-I 而言它有两个消费组分别无Consume-I-I和Consume-I-II,同时这两个消费组又同时拥有各自的多个实例即Instance-I-I-I、Instance-I-I-II和Instance-I-II-I、Instance-I-II-II。生产者发送一条消息如何才能被以上4个实例中的一个监听且被消费掉并且保证该消息不会被重复消费掉呢?
要想解决某个消息不被重复消费,则需要使用Spring Cloud Stream 在集成Rabbit MQ时提供的消息分组和分布式缓存结合使用。
-