请问消息队列RabbitMQ版是否有镜像队列功能,在文档中没看到的?
我们目前想做一个全球多节点的应用,为了能保证各节点网络可用,打算通过多个地区部署多个MQ实例来进行通信,我看镜像队列能实现多个实例的数据同步,我想知道这个消息队列RabbitMQ能做到多个实例数据同步吗?
这个暂时不支持哈。
消息路由功能可以跨实例跨地域同步/复制消息。但由于国家合规问题,现在不支持跨境传输数据。只要涉及跨境传输数据,都需要用户自己购买CEN并报备后,使用报备后的CEN链路自己同步数据。
而且你如果自建使用镜像队列多节点来同步消息的方案,这种网络情况下,估计大概率会有脑裂问题。跨境同步的商业侧的解决方案,我们后续会用EventBridge来支持。但前提是您必须有跨境并且向国家报备过的CEN 网络通路。
此答案来自钉钉群“RabbitMQ&AMQP 产品群"
是的,RabbitMQ版提供了镜像队列功能。RabbitMQ镜像队列是指将生产者发布的消息同步到多个队列副本上,从而提高系统故障恢复和消息可靠性。如果默认队列出现故障,镜像队列能够让每个出现故障的节点上都有一个备份队列跨机房备份。此外,通过对每个存储消息的队列进行分散和副本复制,镜像队列可以提高消息处理的并发性、吞吐量和稳定性。
在RabbitMQ中,要创建一个镜像队列,需要在队列声明时设置x-queue-mode
参数为lazy
,并在arguments
参数中指定ha-mode
为all
,例如:
channel.queue_declare(queue='my_queue', durable=True,
arguments={'x-queue-mode': 'lazy',
'ha-mode': 'all'})
这样就会创建一个指定节点的镜像队列。
需要注意的是,RabbitMQ镜像队列需要相应的配置和硬件支持,适合用于高可用和低延迟的生产环境。
“在3.8 以前的版本,RabbitMQ 通过镜像队列(Classic Queue Mirroring)来提供高可用性。但镜像队列存在很大的局限性,在 3.8 之后的版本 RabbitMQ 推出了 Quorum queues 来替代镜像队列,在之后的版本中镜像队列将被移除。镜像队列通过将一个队列镜像(消息广播)到其他节点的方式来提升消息的高可用性。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/