2013-05-21 22 views
1

我想在代理達到配置的限制時將我的ActiveMQ生產者配置爲故障轉移(我正在使用Stomp協議)。我想讓消費者繼續從超負荷經紀人消費,而不是消減。ActiveMQ:在持久存儲填充時拒絕生產者的連接

閱讀ActiveMQ的文檔,它看起來像我可以配置的ActiveMQ做的幾件事情之一,當一個經紀人達到其極限(內存或磁盤):使用producerFlowControl="true"

  1. 減慢消息(通過阻斷髮送)
  2. 使用時出現異常sendFailIfNoSpace="true"
  3. 以上都不是,在這種情況下......我不確定發生了什麼?恢復到TCP流量控制?

看起來這些東西看起來並不像觸發生產者故障轉移。生產者在失敗連接時會進行故障轉移,但據我所知,它不能發送時(例如由於生產者流量控制)。

那麼,我有可能配置代理拒絕連接,當它達到極限?或者,我最好的辦法是檢測製片方的放慢速度,並手動將我的製作人重新配置爲當時使用不同的經紀人?

謝謝!

回答

3

最好的選擇是使用sendFailIfNoSpace或更好的sendFailIfNoSpaceAfterTimeout。這會向您的客戶端拋出異常,客戶端可以嘗試在應用程序級別將消息重新發送給另一個代理(儘管您可以將此邏輯封裝在Stomp庫的頂部,並使用代碼中的此外觀)。雖然如果您的ActiveMQ設置連接正確,但您的生產和消費方面的負載應該或多或少均勻分佈在您的經紀商中,因此,此功能可能不會爲您帶來很大收益。

如果您專注於消息的快速消費,並且增加了存儲限制以平滑負載峯值,那麼您可能會獲得更好的結果。