【问题标题】:Amazon SQS "Long Polling" configuration. Server vs ClientAmazon SQS“长轮询”配置。服务器与客户端
【发布时间】:2015-01-08 07:37:43
【问题描述】:

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

在客户端,我们也可以在每个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
 };

问题:

a) Queue 中配置的Receive Message Wait Time VS Message Receive Request 中设置的WaitTimeSeconds 属性是什么关系?他们会独立工作吗?或者客户端中设置的值会覆盖队列中设置的值(针对单个请求)。

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

c) 最佳实践是什么。 WaitTimeSeconds > 接收消息等待时间

【问题讨论】:

    标签: c# amazon-sqs aws-sdk


    【解决方案1】:

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

    b) 适用于 .NET 的 AWS 开发工具包在后台使用 System.Net.HttpWebRequest - its default timeout is 100 seconds。如果您使用默认值,将 WaitTimeSeconds 设置为 20 秒不会导致操作超时。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-14
        • 2011-06-05
        • 2013-11-13
        • 2021-08-09
        • 2012-10-16
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        相关资源
        最近更新 更多