RabbitMQ 高可用实现镜像队列
如果 RabbitMQ 集群只有一个 broker 节点,那么该节点的失效将导致整个服务临时性的不可用,并且可能会导致 message 的丢失(尤其是在非持久化 message 存储于非持久化 queue 中的时候)。可以将所有 message 都设置为持久化,并且使用持久化的 queue,但是这样仍然无法避免由于缓存导致的问题:因为 message 在发送之后和被写入磁盘并执行 fsync 之间存在一个虽然短暂但是会产生问题的时间窗。通过 publisher 的 confirm 机制能够确保客户端知道哪些 message 已经存入磁盘,尽管如此,一般不希望遇到因单点故障导致服务不可用。 如果 RabbitMQ 集群是由多个 broker 节点构成的,那么从服务的整体可用性上来讲,该集群对...阅读全文