亚马逊SQS“长轮询”配置。服务器与客户端

时间:2014-11-05 23:40:36

标签: c# amazon-sqs aws-sdk

很久以前,亚马逊推出了长轮询功能。通过这种方式,可以在队列上配置“接收消息等待时间”参数。根据文档,有效值落在0 - 20秒范围内。

enter image description here

在客户端中,我们还可以在每个 MessageReceiveRequest 上配置此参数。我正在使用AWS SDK for .NET。

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
 };

问题:

a)在队列VS中配置的接收消息等待时间与消息接收请求中设置的 WaitTimeSeconds 属性之间的关系是什么?他们会独立工作吗?或者,客户端中设置的值将覆盖队列中设置的值(对于该单个请求)。

b)在某些情况下,C#客户端可以超时吗?我正在考虑将这两个值设置为最大值(20秒),但我担心这可能导致C#长轮询操作超时。

c)最佳做法是什么? WaitTimeSeconds > 接收消息等待时间

2 个答案:

答案 0 :(得分:3)

a)正如pastk的回答所述,消息上的WaitTimeSeconds将覆盖队列中配置的接收消息等待时间。有关详细信息,请参阅long polling文档。

b)AWS SDK for .NET使用System.Net.HttpWebRequest - its default timeout is 100 seconds。如果您使用的是默认值,则将WaitTimeSeconds设置为20秒不会导致操作超时。

c)亚马逊在这一点上没有规定最佳做法。做你认为最适合你的场景的任何事情。

答案 1 :(得分:2)

它只是设置所需等待时间的另一种方式。 请求级别等待时间始终覆盖队列值:“对于ReceiveMessage的WaitTimeSeconds参数,设置在1到20之间的值优先于为队列属性ReceiveMessageWaitTimeSeconds设置的任何值。” (http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html

如果某些队列的消费者需要使用长轮询,而其他消费者则不需要使用每个请求的等待时间设置,否则使用队列的设置会更简单。

相关问题