我使用以下策略在2个节点上设置了一个带有消息镜像的3节点RabbitMQ集群:
ha-mode: exactly
ha-params: 2
ha-sync-mode: automatic我正在使用Spring Boot和Spring AMQP做一些性能测试。基本上,我让Apache向发布消息的控制器发送JMeter请求:
@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这样的第四层代理更好吗?
发布于 2017-03-09 02:30:58
在底层的兔连接工厂上重置autoRecoverEnabled (在1.7.0中默认值为真);在1.7.1中默认为false。
RabbitTemplate将比客户端的autoRecovery机制更快地恢复连接。
但是,为了避免消息丢失,您可能需要考虑向RabbitTemplate添加一个RetryTemplate。
https://stackoverflow.com/questions/42678409
复制相似问题