消息队列面试题:如何保证消息队列的高可用? ~ langhai

林书豪
2024-01-15 17:30:41
消息队列面试题:如何保证消息队列的高可用? 浪海值:957度
文章标签:rabbitMQ消息队列
文章摘要:消息队列面试题:如何保证消息队列的高可用?
使用新的显示器:新的显示器 如果遇到图片单击即可放大/缩小。

消息队列面试题:如何保证消息队列的高可用?

开源项目:浪海博客  需要星星 谢谢 ~

gitee地址:https://gitee.com/langhai666/langhai-blog

github地址:https://github.com/Allenkuzma/langhaiblogs

在企业开发中保证消息队列的高可用性是一个常见的需求。下面以 rabbitMQ 消息队列的部署模式来说明。

单机模式

在不重要的数据场景,或者测试环境过程中使用单机模式,但是在企业生产环境中,一般不建议使用单机模式,因为单个 rabbitMQ 一旦宕机,将无法对微服务提供服务支持。

普通集群模式

公司假设有三台服务器,在每一台服务器上分别启动一个 rabbitMQ 实例。创建队列 queue 会存储到其中的某一个 rabbitMQ 实例上。但是这种模式并不能起到高可用的作用。消费者来消费数据的时候,会随机连接到某一个 rabbitMQ 实例上,各个 rabbitMQ 实例会同步它们的元数据信息,也就是配置信息。消费者做数据拉取的时候,会通过元数据信息从 queue 所在的那个 rabbitMQ 实例上拉取数据。假设其中一个 rabbitMQ 实例宕机,还是会存在部分数据不能及时消费的情况。在开启了消息持久化的情况下,需要等这个宕机的 rabbitMQ 实例恢复,才能继续消费这个 queue 里面的数据。总体来说普通集群模式不能提供高可用性,但是能够提高整个消费队列的吞吐量。

镜像集群模式

镜像模式为了解决高可用问题,把 queue 队列里面的消息会存在多个实例节点上,在 rabbitMQ 的控制台可以设置同步到几个实例节点上,或者同步到所有的实例节点上。这样的话即可有部分实例节点宕机,也能在其他实例节点获取到消息数据。

缺点:消息数据需要同步到其他实例节点上,需要消耗网络带宽。


提交评论