What are the main differences between these two properties?
两者的区别在于,后者的发生有多种原因,例如节点重启、网络故障等,两者的触发点不同。 ha-promote-on-failure 当节点出现故障、失去连接或从集群中删除时触发。ha-promote-on-shutdown 当节点被关闭时触发正常关机。
When are they applied?
当队列主节点发生故障时,RabbitMQ 提供了一个选项,可以将包含该队列的节点提升为主队列节点。使用 ha-promote-on failure 或 ha-promote-on-shutdown 参数配置如何完成此提升。
- always:当参数设置为always时,任何一个包含队列的节点都会被选为主节点。使用此选项,队列可能不同步,您可能会丢失消息。
- when-synced:当参数设置为when-synced时,将选择与主队列节点同步的节点。在这里您可以确定所选节点将包含与主节点相同的消息。但它有一个缺点。如果没有队列与 master 同步,则不会选择任何节点。
默认 ha-promote-on-shutdown 设置为 when-synced 并且 ha-promote-on-failure 设置为总是。
And how should I configure it to achieve Consistency over Availability (CAP theorem)?
对于一致性,使用when-synced
;对于可用性,请使用 always