以前rabbitmq学习与实践分享(2)中主要谈到了rabbitmq提供的一些手段和机制来从生产端,消费端以及broker端保证消息机制的可靠性。可是没有考虑到单点故障以及broker如何抗住高负载,来保证消息中间件的高可用性。本文主要结合本身的理解谈论这个问题。node
rabbitmq 提供高可用性的机制主要有如下2种手段:app
rabbitmq 的集群有如下几个特色:运维
rabbitmq 集群中建立队列,只会在单个节点,而不是全部节点上建立队列的进程并包含队列的完整消息(元数据,状态,内容)。建立队列进程的节点称为宿主节点,该节点知道队列的全部信息,其余的节点仅仅知道队列的元数据信息以及包含指向这个宿主节点的指针。 因此若是这个宿主节点因某种缘由出现宕机时,该节点中的消息会丢失。固然后面介绍的镜像队列能够解决这种状况出现的消息丢失问题。学习
rabbitmq集群的搭建过程偏运维,此处就不作介绍了,涉及到相关的命令以下:spa
镜像队列的机制主要做用就是经过冗余队列中的消息,来避免集群中宿主队列宕机时致使的消息丢失问题。引入镜像队列机制,经过将队列镜像到其余的broker节点上,对一个宿主队列(master)配置多个slave节点,从而提高可用性。指针
针对镜像队列而言:全部的操做(除了消息发送)都是先应用到队列的主节点,而后经过主节点传播到镜像队列的从节点的,当主节点宕机时,最老的从节点会自动晋升成为新的主节点.
镜像队列的配置是经过policy 设置的:
rabbitmqctl set_policy -p vhost [ --priority priority ] [--apply-to apply-to] name pattern {definition}
复制代码
参数简要介绍:pattern 指要匹配的队列模式 definition 包含3个部分:code
本文主要简要的介绍了一下rabbitmq 如何提高可用性来保证消息不丢失的。可是在实际生产环境,面对突发的流量的时候,rabbitmq 如何能扛住呢,有没有什么机制能够实现呢,好比流控? 这块内容在下一小节继续分享。cdn