AWS Sqs ReceiveMessage没有SendMessage那么快

时间:2014-07-14 17:05:38

标签: amazon-web-services sendmessage amazon-sqs

我有第一个用于将消息发送到aws sqs的Web服务,此Web服务部署在单独的ec2实例上。 Web服务在IIS 8下运行。此Web服务能够从两台计算机每秒处理500个请求,这意味着每秒1000个请求。它可以处理更多请求。

我在同一电源/配置的另一个ec2实例上部署了第二个Web服务。此Web服务将用于处理存储在Sq中的消息。出于测试目的,我只接收来自Sqs的消息,只是删除它。

我有一个aws Sns服务,告诉第二个Web服务广告中有消息,去接收要处理的消息。

但我观察到我的第二个Web服务没有第一个Web服务那么快,每次运行测试时,消息都保留在sqs中,但理想情况下,sqs中不会保留任何消息。

请指导我可能的原因以及我应该关注的领域。

提前致谢。

2 个答案:

答案 0 :(得分:0)

接收器有两倍的工作要做,因为它接收和删除在两个单独的调用中完成的消息。如果您的音量很高,您可能需要加倍实例来处理已发送的消息。

答案 1 :(得分:0)

您一次收到多少条消息?我强烈建议将MaxNumberOfMessages设置为10,然后使用批次为10的DeleteMessageBatch。这不仅会大大提高吞吐量,还会使您的SQS账单减少约60%。

另外,我对SNS主题感到困惑。没有必要让SNS主题告诉其他Web服务存在消息。如果每条消息都生成了对该主题的发布,那么您将添加大量额外的工作和费用。相反,您应该使用长轮询并将WaitTimeSeconds设置为20并始终调用SQS。即使您在一个月内获得0条消息,2台服务器也会不断进行长时间轮询。如果您在免费套餐之上,那么长时间轮询SQS队列的2台服务器的总成本为0.13美元/月