rabbitmq有3种模式,但集群模式是两种:
- 单一模式:单机情况下不做集群,就单独运行一个rabbitmq而已
普通模式:默认模式,对于Queue来说,消息实体只存在于其中一个节点中,节点间仅有相同的元数据,即队列的结构。当消息进入节点1时,消费者在节点2消费时,rabbitmq会临时在节点间进行消息传输,把消息实体从节点1取出并经过节点2发送给消费者。
所以消费者应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。当rabbit01节点故障后,rabbit02节点无法取到rabbit01节点中还未消费的消息实体。如果做了消息持久化,那么得等rabbit01节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。
镜像模式:把需要的队列做成镜像队列,存在与多个节点属于RabbitMQ的HA方案。该模式解决了普通模式中的问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取。
除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。