我们正在使用两个RabbitMQ节点的集群,我们正在使用RabbitMQ Java驱动程序与节点进行交互。我们正在使用“头”交换,它根据头绑定和持久队列将消息传输到队列。
问题是,为一个节点定义了队列。如果此节点由于某种原因而崩溃,则应该到达此节点的队列中的消息将丢失。
有没有办法告诉RabbitMQ在检测到另一个拥有它们的节点无法访问时更改队列主节点,因此,确保将消息传输到队列?并在节点再次启动时恢复消息?
目前,我们正在使用高可用队列来解决此问题,但性能非常糟糕。我们不需要它提供的镜像功能,因为我们只能在节点再次出现时恢复消息
答案 0 :(得分:1)
您需要messages persistent将delivery_mode
设置为2并声明队列持久。这样,当重新启动节点并保存消息时,队列就会返回。更多the second tutorial。实际上我没有在教程中看到如何在java中,但它是there in phyton,所以你需要查找javadoc,可能也是'publish'方法中的参数。