RabbitMQ的HA部署,以避免丢失的消息
问题描述:
我设置了2个节点的消息镜像具有以下策略3个节点集群的RabbitMQ:RabbitMQ的HA部署,以避免丢失的消息
ha-mode: exactly
ha-params: 2
ha-sync-mode: automatic
我正在使用Spring引导和Spring AMQP一些性能测试。基本上我已经阿帕奇JMeter的发送HTTP请求到发布的消息的控制器:
@RequestMapping(value = "/webhook", method = RequestMethod.POST)
public void webhook(@RequestBody(required = true) String webhookBody, HttpServletRequest request) {
rabbitTemplate.convertAndSend("exchange", "key", "message");
}
具有以下配置:
spring:
rabbitmq:
addresses: rabbitmq-1:5672,rabbitmq-2:5672,rabbitmq-3:5672
我已经配置了脚本做每100ms的请求,并且在运行余尝试关闭一个节点。结果是AutoRecoverConnectionNotCurrentlyOpenException
和至少8-9失败的请求。 您还有其他什么设置可以完全避免这种情况下的失败响应?使用像HAProxy/Nginx这样的Layer 4代理更好吗?
答
重置底层兔子连接工厂的autoRecoverEnabled
(默认为1.7.0);它在1.7.1中默认为false。
RabbitTemplate
将比客户端的自动恢复机制更快地恢复连接。
但是,为避免消息丢失,您可能需要考虑在RabbitTemplate
中添加RetryTemplate
。
感谢您的建议@加里罗素,升级到最新的春季靴1.5.2做了诡计,我没有生产者方丢失的消息。 –