2014-11-05 93 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

如果某些队列的使用者需要使用长轮询而其他使用者不需要,那么使用每请求等待时间设置是有意义的,否则使用队列设置更简单。