2014-11-05 55 views
2

很久以前,亞馬遜推出了長輪詢功能。並且,可以在隊列上配置「接收消息等待時間」參數。根據文檔,有效值落在0-20秒的範圍內。Amazon SQS「長輪詢」配置。服務器與客戶端

enter image description here

在客戶端,我們也可以配置在每個MessageReceiveRequest此參數。我正在使用適用於.NET的AWS開發工具包。

var receiveRequest = new ReceiveMessageRequest 
{ 
    QueueUrl = "https://queue-url-goes-here.com", 
    MaxNumberOfMessages = 10, 
    VisibilityTimeout = 30, 
    WaitTimeSeconds = 20 // This should tell if we want long polling or not 
}; 

問題:

一個)什麼是之間的關係接收在隊列VS配置的WaitTimeSeconds屬性在消息組接收請求消息等待時間?他們會獨立工作嗎?或者,客戶端中設置的值將覆蓋隊列中設置的值(針對該單個請求)。

b)在某些情況下,C#客戶端可以超時嗎?我正在考慮將這兩個值設置爲最大值(20秒),但恐怕可能會導致C#長輪詢操作超時。

c)什麼是最佳做法。 WaitTimeSeconds>接收消息等待時間

回答

3

a)正如在Pastk的回答中指出的那樣,消息上的WaitTimeSeconds將覆蓋隊列中配置的接收消息等待時間。有關詳細信息,請參閱long polling文檔。

b)AWS SDK for .NET使用System.Net.HttpWebRequest - its default timeout is 100 seconds。如果使用默認值,將WaitTimeSeconds設置爲20秒不會導致操作超時。

c)亞馬遜在這一點上沒有規定最佳做法。做你認爲最適合你的場景。

1

它只是一個不同的方式來設置你需要的等待時間。 請求級別的等待時間總是覆蓋隊列值:「對於ReceiveMessage的WaitTimeSeconds參數,設置1到20之間的值優先於爲隊列屬性ReceiveMessageWaitTimeSeconds設置的任何值。」 (http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html

如果某些隊列的使用者需要使用長輪詢而其他使用者不需要,那麼使用每請求等待時間設置是有意義的,否則使用隊列設置更簡單。