AWS SQS异步排队模式(请求/响应)

Zaheer Ally

我正在寻找有关产品的建筑设计决策的帮助。

我们有多个生产者(通过对Lambda的API网关调用启动)将消息放入SQS队列(请求队列)中。可以有多个同时调用,因此会有多个Lambda实例并行运行。

然后,我们有消费者(让我们说二十个EC2实例)对SQS进行长时间轮询以获取处理它们的消息。每个处理一条消息大约需要30-45秒。

然后,理想情况下,我想将响应发送回发出请求的生产者-这是我在SQS上苦苦挣扎的部分。从理论上讲,我将有一个单独的响应队列,然后最初的Lambda生产者将使用这些响应队列,但是似乎没有办法选择特定的相关响应。也就是说,每个Lambda函数可能会拾取另一个函数的响应。我正在寻找类似于此设计模式的内容:http : //soapatterns.org/design_patterns/asynchronous_queuing

我看到的唯一选择是为每个Lambda API调用创建一个新的SQS响应队列,并在消息中传递其ARN以便消费者进行响应,但是我无法想象这非常有效-尤其是当有每分钟可能有数百条消息?我是否缺少明显的东西?

我想唯一的另一种选择是建立一个更大的消息代理(例如RabbitMQ / ApacheMQ)环境,但是我想尽可能避免这种情况。

谢谢!

马特·豪瑟

是的,您可以将RabbitMQ用于更多的“ rpc”队列模式。

但是,如果您想停留在AWS内,请尝试使用SQS以外的其他方式进行响应。

相反,您可以使用S3作为响应。当您的生产者将物料放入SQS中时,请在消息中包括响应的S3目标。用户完成任务后,将响应放在所需的S3位置。

然后,您可以检查S3的响应。

更新资料

您可能可以使用Redis完成类似RPC的消息队列。

https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis

然后,您可以将AWS ElastiCache用于Redis集群。这将完全取代SQS的使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章