我已经建立了一个包含3个节点的RabbitMQ集群:rabbit1,rabbit2和rabbit3,每个节点都在docker容器中运行。
所有队列都在三个节点之间镜像,rabbit1是主节点。当我停止Rabbit2或rabbit3的容器时,剩下的两个节点工作正常。如果我在队列中有3条消息,那么这些消息仍然存在于rabbit1上,而另一个节点仍然存在。
但是,如果我停止rabbit1,则清空rabbit2和rabbit3的队列,直到我再次启动rabbit1。如果我向rabbit2或rabbit3发送消息,则会收到消息,但不会保存到队列中;而当rabbit1启动并向Rabbit2 / rabbit3发送内容时,消息将被保存并正确同步。
我是否需要考虑任何方式或任何配置,以便在关闭主服务器时不从从服务器清空消息,但是从服务器选择新主服务器或者至少保留消息? 非常感谢你提前。
答案 0 :(得分:0)
设置群集是一回事,但您还需要配置队列镜像。默认情况下,队列不会在其他节点上复制:您需要使用策略明确indicate which queue(s) must be replicated and how。
上面链接的RabbitMQ文档作为几个用例的示例。
答案 1 :(得分:0)
所以我发现了问题:
我在我的代码中声明了队列,即使rabbitmq“计算”这些队列,它们也不会出现在管理下,例如,既不能用“rabbitmqctl list_queues”查看。
如果我通过UI或通过rabbitmqadmin声明队列并让服务连接到现有队列,它可以正常工作。
我不知道,为什么队列没有出现在管理工具中,即使它们显然存在于某处(因为我可以读/推)。