2017-03-08 91 views
1

我設置了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代理更好嗎?

回答

1

重置底層兔子連接工廠的autoRecoverEnabled(默認爲1.7.0);它在1.7.1中默認爲false。

RabbitTemplate將比客戶端的自動恢復機制更快地恢復連接。

但是,爲避免消息丟失,您可能需要考慮在RabbitTemplate中添加RetryTemplate

+0

感謝您的建議@加里羅素,升級到最新的春季靴1.5.2做了詭計,我沒有生產者方丟失的消息。 –