15 01 2024

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

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

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 的控制台可以设置同步到几个实例节点上,或者同步到所有的实例节点上。这样的话即可有部分实例节点宕机,也能在其他实例节点获取到消息数据。

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


延伸阅读
  1. 浪海博客系统友情链接说明
  2. 浪海同志的一生
  3. 浪海皇室 QQ飞车手游
  4. 浪海博客系统部署说明
  5. minio 相关说明
  6. mysql相关说明
  7. rabbitMQ 相关说明
  8. java基础面试题002
  9. gateway服务网关基本使用
  10. ribbon负载均衡
如果出现代码等内容显示不正常,使用以前的显示器:以前的显示器
发表评论