在现实的微服务架构中,我们的每一个微服务应用为了实现高可用和负载均衡,实际上都会部署多个实例。在很多情况下,消息生产者发送消息给某个具体微服务时,只希望被消费一次,当进行集群部署时,虽然他们都属于同一个项目,但是消息会被多次消费,为了解决这个问题,springcloud Stream 提出了消费组的概念。
可以通过 spring.cloud.stream.bindings.input.group 属性为应用指定一个组名,这样这个应用的多个实例在接收到消息的时候,只会有一个成员真正收到消息并进行处理。
spring:
# Rabbitmq 配置:RabbitProperties
rabbitmq:
# RabbitMQ主机地址。如果设置了address属性,则忽略。
host: 192.168.31.100
# RabbitMQ端口。如果设置了address属性,则忽略。默认为 5672,如果启用了SSL,则默认为5671。
port: 5672
# 访问broker进行身份验证的账号。默认为“guest”。
username: admin
# 访问broker进行身份验证的密码。默认为“guest”。
password: admin
# 连接到broker时要使用的虚拟主机。
virtual-host: /
# 消息发布确认方式,有三个可选值:SIMPLE、CORRELATED、NONE。默认为NONE。
publisher-confirm-type: simple
# 启动消息失败返回,只有设置为true时,消息路由失败才会触发Return回调
publisher-returns: true
# RabbitProperties.Template
template:
# 当exchange无法找到任何一个合适的queue时,将消息return给生产者
mandatory: true
# RabbitProperties.Listener
listener:
simple:
#NONE:自动确认;AUTO:根据情况确认;MANUAL:手动确认
acknowledge-mode: manual
direct:
#NONE:自动确认;AUTO:根据情况确认;MANUAL:手动确认
acknowledge-mode: manual
cloud:
stream:
#instanceCount: 2 #消费者总数
#instanceIndex: 0 #当前消费者的索引
# 消息中间件绑定配置:BindingProperties
bindings:
sms-input:
# 指定要使用的 Exchange 名称
destination: ramq.sms.topic
#设置消息类型
content-type: application/json
#设置消息的组名称(同名组中的多个消费者,只会有一个去消费消息.)
group: group1
binders:
defaultRabbit:
type: rabbit
在同一个group中的多个消费者只有一个可以获取到消息并消费
作者:Jeebiz 创建时间:2023-03-30 11:55
最后编辑:Jeebiz 更新时间:2024-11-01 10:06
最后编辑:Jeebiz 更新时间:2024-11-01 10:06