java - 在 RabbitMQ 上的多个节点上定义队列

标签 java rabbitmq

我们正在使用两个 RabbitMQ 节点的集群,并使用 RabbitMQ Java 驱动程序与节点进行交互。我们正在使用“ header ”交换,它根据 header 绑定(bind)和持久队列将消息传输到队列。

问题是,队列是为一个节点定义的。如果该节点由于某种原因崩溃,则应到达该节点队列的消息将丢失。

当 RabbitMQ 检测到持有队列主节点的另一个节点无法访问时,有没有办法告诉 RabbitMQ 更改队列主节点,从而确保消息传输到队列?当节点再次出现时恢复消息?

目前,我们使用高可用队列来解决这个问题,但性能相当糟糕。我们不需要它提供的镜像功能,因为我们只在节点再次出现时恢复消息就可以了

最佳答案

您需要制作 messages persistentdelivery_mode 设置为 2 并声明队列持久。这样,当节点重新启动并保存消息时,队列就会恢复。更多内容请参见the second tutorial 。实际上我在教程中没有看到如何在java中使用它,但它是 there in phyton ,因此您需要在 javadoc 中查找,可能也是“发布”方法中的一个参数。

关于java - 在 RabbitMQ 上的多个节点上定义队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42227650/

相关文章:

java - 责任链 [GoF] 缺点

java - 如何使用 Java 在 PostgreSQL 中跳过插入自动生成的 ID 号?

java - 在java opencv中从MatOfKeyPoint获取前100个值

rabbitmq - Windows上的rabbitmq-plugins的"Directory name is invalid."等

azure - 将rabbitmq部署到Azure

python - 获取另一台服务器中 celery 任务的状态

amqp 上的 C 二进制消息

java - 哪种开源Java缓存框架最受欢迎,为什么?

java - YAJSW窗口服务未启动

php - RabbitMQ 和 PHP 如何将任务返回到队列?