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

+0

感谢您的建议@加里罗素,升级到最新的春季靴1.5.2做了诡计,我没有生产者方丢失的消息。 –