我在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层代理是否更好?
答案 0 :(得分:1)
重置基础兔连接工厂上的autoRecoverEnabled
(默认情况下在1.7.0中为真);默认情况下,它在1.7.1中再次为假。
RabbitTemplate
将比客户端的自动恢复机制更快地恢复连接。
但是,为避免邮件丢失,您可能需要考虑向RetryTemplate
添加RabbitTemplate
。