2016-10-04 54 views
0

我有一個Scala應用程序來做一些基於customer_id的繁重計算,我把客戶ID放在SQS(亞馬遜簡單隊列服務)中,它在ElastikBeansTalk上配置的應用程序使用來自SQS的消息。如何基於來自SQS的消息縮放Elasticbeanstalk應用程序工作者?

我想根據來自SQS的消息來擴展我的應用程序,問題是我的應用程序正在作爲HTTP服務器運行,並在完成計算後返回200個代碼,最少需要15分鐘。

SQS最大超時時間爲60秒,所以在此之後,所有的信息都以死信隊列結束,我試圖在完成計算之前發送一個200響應代碼,但它從隊列接收另一條消息並啓動另一個進程。

任何解決方案,請?

編輯:我的工作人員配置的例子: enter image description here

預先感謝您!

回答

1

最大VisibilityTimeout是12小時。所以你可以把它放到30分鐘,這應該涵蓋你的情況。

+0

謝謝Esardes,我將它增加到3600秒,但是當我看到我的應用程序日誌時,它開始消費消息而不發送200響應代碼,我如何確保它只消耗一條消息,sqs等待它完成? –

+0

設置您的Worker時,您可以配置[HTTP連接]的最大數量(http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html)它可以使,這是它運行的同時作業的最大數量。默認情況下,它是10,而你的工作需要15分鐘,這說明了爲什麼你看到它在同步任務之前同時啓動10個並行工作。如果你真的想要一個一個地將它們的值設置爲1,但要小心:如果你有很多客戶,那麼完成所有工作將需要大量的時間! (客戶數量x 15min) – Esardes

+0

再次感謝您,我的應用程序沒有很多客戶端,它會在隊列/日期中收到最多20個customer_id,我將http連接更改爲1,並增加'Visibility timeout'到3600秒,但現在在處理單條信息時,我在62秒後再次收到它,並且我一直收到它...... 我應該如何避免這種情況? –

0

嗯,這個問題不是來自Akka HTTP Server或來自SQS,它來自默認的nginx conf。通過編輯默認的proxy_read_timeout將60秒修改爲所需的值來解決問題。

相關問題