- RabbitMq简介
- RabbitMq exchange四种方式
- RabbitMq Consumer和Producer端使用
- RabbitMq确认机制
- RabbitMq Cluster 和 High Availability
一、RabbitMq Cluster
- 所有节点两两相连
- users, virtual hosts, exchanges, bindings,queue metadata会自动镜像到所有Node
- 连接任意一个Node都能看到集群中的所有Queue
- 在集群中的所有节点必须是相同的Erlang cookie
- Queue消息只在一个节点中存储
- 如果Consumer连接Node2,获取Queue1消息,Node2会从Node1获取消息然后返回给Consumer
二、RabbitMq High Availability
- 镜像队列包括一个Master和多个Mirrors,如果Master挂掉时,最老的Mirror晋升为Master,还没有从Master复制到Mirrors的消息会丢失
- Consumer连接到Mirror节点时会让Consumer重定向到Master,Consumer最终只和Master交互,这样保证了消息的先进先出
- 镜像队列只是提升了高可用性,没有分担负载
- 新晋升的Master会把没有收到ack的消息重新放入队列,包括旧Master没有收到的ack消息,Master收到ack,但是就是Master广播到Mirrors时丢失ack的消息。所以Consumer可能会收到重复消息。