2017-02-02 129 views
0

我們有一個實現,即將消息放在AWS SQS隊列中並由Camel AWS使用。我們正在使用concurrentConsumers = 1.我們正在通過org.apache.camel.component.aws.sqs.SqsConsumer完成隊列的輪詢。Apache Camel沒有及時從SQS獲取消息

測試包括向SQS發送消息(來自遠程系統),然後記錄消息在隊列中的時間。在Camel端,我們對SqsConsumer類進行了跟蹤日誌記錄,我們可以看到輪詢輪詢的時間以及消息的消耗時間。

如果我們每10秒在隊列中放置一條消息,大多數時間駱駝都會在1-2秒內收到消息。但是,有很多時候需要更長的時間(10+秒)。

基本上我們看到此行爲:

  • (遠程)放在SQS
  • (駱駝)投票
  • (駱駝)投票
  • (駱駝)投票
  • 消息... (對於許多輪詢,默認開的500毫秒)
  • (CAMEL)從SQS
接收消息

我們已經在沒有Camel的情況下端對端地測試了SQS,吞吐量沒有問題(幾秒鐘內有1000條消息)。

我們的這個測試的Camel實現只包含從SQS隊列讀取和日誌記錄 - 沒有其他功能。

我們已經測試過改變許多其他駱駝SQS參數,沒有行爲上的差異。但是,例如,如果我們使用concurrentConsumers = 10進行測試,則每個消息幾乎是立即從隊列中拾取,延遲最小。

我的問題是爲什麼單個消費者沒有及時拿起信息?如果真的每500毫秒輪詢一次,它怎麼沒有「看到」和收集消息?

注意 - 由於我們的應用程序的功能,我們很猶豫是否啓用了使用concurrentConsumers的多線程。

+0

您是否嘗試過長時間輪詢? –

+0

@ketanvijayvargiya是的,但行爲似乎相同。 –

回答

0

正如@ketanvijayvargiya所建議的那樣,長時間的投票似乎確實是答案。由於您的評論,我們再次查看它。有多種方法來設置我們嘗試了值:

  1. 通過駱駝本身的SQS URI,receiveMessageWaitTimeSeconds =
  2. 在AWS SQS隊列本身設置它(控制檯,配置隊列上 - >接收消息等待時間)。

我們測試過(2)並沒有看到任何行爲改變(在我的文章發佈時)。我們再次使用(1)進行測試並看到了改進。我們再次用(2)重新測試,也看到了改進,所以我們只能假設我們在進行第一次測試時犯了一個錯誤。