消息重复消费场景
如何解决
如果同一个订单同时被两个服务获取,那么就会造成数据错误,为了避免这种情况。
可以使用Stream中的消息分组来解决。
在Stream中,处于同一个group中的多个消费者是竞争关系,就能保证消息智慧被其中一个应用消费一次。
不同的组可以全面的消费(重复消费)。
修改yml
spring:
application:
name: cloud-stream-consumer
cloud:
stream:
binders: #此处配置需要绑定的rabbitmq的服务信息
defaultRabbit: #表示定义的名称,用于binding整合
type: rabbit #消息组件的类型
enviroment: #设置rabbitmq的相关环境设置
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
bindings: # 服务的整合处理
input: # 这个名字是一个通道的名称
destination: studyExchange #要使用的消息交换机名称
content-type: application/json #设置消息类型,这里用的是json,纯文本可以设置为 “text/plain”
binder: defaultRabbit #设置要绑定的消息服务的具体设置
group: ezerbelGroup
8802、8803都指定group,group的名字相同
测试防重复消费
一连串的消息发送过去后,同一组内的两个微服务会交替接收到消息。
测试消息持久化
去掉8002的分组配置,但保留8003的分组
先关闭这两个微服务,8801发送四条消息
再启动8802,启动后8802并没有处理前面四条消息!
再启动8803,启动后8803会继续处理前面未被处理的四条消息。