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

8
很久以前,亚马逊引入了长轮询功能。通过这个功能,可以在队列上配置“接收消息等待时间”参数。根据文档,有效值的范围为0-20秒。
在客户端中,我们还可以在每个MessageReceiveRequest上配置此参数。我正在使用AWS .NET SDK。
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)队列中配置的“接收消息等待时间”和消息接收请求中设置的“WaitTimeSeconds”属性之间有什么关系?它们会独立工作吗?还是客户端设置的值会覆盖队列中设置的值(对于单个请求)。

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

c)最佳实践是什么?WaitTimeSeconds > Receive Message Wait Time吗?

2个回答

4

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

b) AWS .NET SDK在内部使用System.Net.HttpWebRequest - 其默认超时时间为100秒。如果您正在使用默认值,则将WaitTimeSeconds设置为20秒不会导致操作超时。

c) Amazon没有针对此问题规定最佳实践。请根据您的情况自行决定。


2
这是一种设置等待时间的不同方式。请求级别的等待时间始终会覆盖队列的值:“在 ReceiveMessage 的 WaitTimeSeconds 参数中设置 1 到 20 的值优先于为队列属性 ReceiveMessageWaitTimeSeconds 设置的任何值。”(http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html
如果队列的某些消费者需要使用长轮询而其他消费者不需要,则使用每个请求的等待时间设置是有意义的,否则最好使用队列的设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接