RabbitMQ HA部署以避免丢失消息

时间:2017-03-08 17:50:13

标签: rabbitmq high-availability spring-amqp

我在2个节点上设置了3节点RabbitMQ集群,并带有消息镜像,具有以下策略:

ha-mode: exactly
ha-params: 2
ha-sync-mode: automatic

我正在使用Spring Boot和Spring AMQP进行一些性能测试。基本上我有Apache 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

我已经将脚本配置为每100毫秒执行一次请求,并且在运行时我尝试关闭一个节点。结果是AutoRecoverConnectionNotCurrentlyOpenException,并且至少有8-9个请求失败。 在这种情况下,您建议使用哪些其他设置来完全避免响应失败?使用像HAProxy / Nginx这样的第4层代理是否更好?

1 个答案:

答案 0 :(得分:1)

重置基础兔连接工厂上的autoRecoverEnabled(默认情况下在1.7.0中为真);默认情况下,它在1.7.1中再次为假。

RabbitTemplate将比客户端的自动恢复机制更快地恢复连接。

但是,为避免邮件丢失,您可能需要考虑向RetryTemplate添加RabbitTemplate