很久以前,亚马逊推出了长轮询功能。这样,就可以在队列上配置“接收消息等待时间”参数。根据文档,有效值的范围为 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与 Message Receive Request 中设置的WaitTimeSeconds属性有什么关系?他们会独立工作吗?或者客户端中设置的值会覆盖队列中设置的值(针对该单个请求)。
b) 在某些情况下,C# 客户端会超时吗?我正在考虑将这两个值都设置为最大值(20 秒),但我担心这可能会导致 C# 长轮询操作超时。
c) 最佳实践是什么。WaitTimeSeconds >接收消息等待时间?