我正在寻找有关产品的建筑设计决策的帮助。
我们有多个生产者(通过对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] 删除。
我来说两句