use*_*666 3 spring rabbitmq nodes spring-amqp spring-boot
在 RabbitMQ 文档中提到:
RabbitMQ 代理操作所需的所有数据/状态都会在所有节点上复制。消息队列是一个例外,默认情况下消息队列驻留在一个节点上,尽管它们对所有节点都是可见且可访问的。要跨集群中的节点复制队列,请使用支持复制的队列类型。仲裁队列指南中介绍了此主题。
如果我们使用 springboot amqp 经典队列,并且需要开始使用 RabbitMQ 集群,其中数据在节点之间复制,以将数据丢失的风险降至最低,那么需要对代码进行哪些更改才能开始使用仲裁队列?
定义队列时,默认类型为经典队列,若要选择仲裁类型,只需添加队列类型作为参数即可:
@Bean
public Queue eventsQueue() {
Map<String, Object> args = new HashMap<>();
args.put("x-queue-type", "quorum");
return new Queue(queueName, true, false, false, args);
}
Run Code Online (Sandbox Code Playgroud)
除了上述内容之外,请确保将 Spring Boot Rabbit mq 指向集群而不是一个节点。这可以通过将 application.properties 中的 spring.rabbitmq.host 配置更改为 spring.rabbitmq.addresses=[逗号分隔的 ip:port] 来完成
经典队列的主节点运行在集群中某个节点上,而镜像则运行在其他节点上。这与仲裁队列的工作方式非常相似,默认情况下,领导者在创建它的客户端应用程序所连接的节点上运行,而追随者在集群中的其余节点上创建。过去,队列的复制是通过将策略与经典队列结合使用来指定的。仲裁队列的创建方式不同,但应该与所有客户端应用程序兼容,这些应用程序允许您在声明队列时提供参数。创建队列时,需要为 x-queue-type 参数提供仲裁值。
| 归档时间: |
|
| 查看次数: |
4769 次 |
| 最近记录: |