【发布时间】:2019-01-29 14:48:06
【问题描述】:
我们正在构建一个具有微服务架构的应用程序。
微服务架构将遵循面向消息的模式,使用 AWS SQS。
我们希望将消费者服务的完成结果返回给生产者服务。
这是我们正在考虑的算法:
- 生产者创建具有唯一 ID 的消息
- 生产者订阅以消息 ID 命名的 Redis 频道
- 生产者将消息放入 SQS 队列
- 消费者从 SQS 队列中移除消息并执行操作
- 消费者将操作结果发布到以消息id命名的Redis通道
- 生产者收到完成结果并恢复执行
这是将消息完成结果从消费者传回生产者的合理方式吗?
【问题讨论】:
-
如何创建一个响应队列,消费者将所有响应放在这个队列中?生产者和侦听器线程正在运行,将在收到响应消息后开始进一步处理。这样您就可以避免每条消息都排队。
-
我喜欢这个主意。我们的应用程序将有许多大规模生产者,您认为这对 SQS 来说会是一个问题吗,在单个(响应)队列上为(可能)成千上万的同时监听器提供服务?另外,我的印象是 Redis 能够为每条消息处理一个通道的使用,你不这么认为吗?
-
我认为,如果您拥有数千个频道或 1 个频道拥有数千个听众,这并不重要。这两种情况都会以相同的方式使您的代理紧张,然后可以通过集群和横向扩展来处理。在这种情况下,您可以通过比较实施的难易程度来选择一种方法。
-
我的理解是您cannot filter messages based on a message attribute in SQS,这似乎排除了在单个 SQS 队列上大规模使用数千个侦听器。我错了吗?还是我误解了你的建议?
标签: redis aws-lambda microservices message-queue amazon-sqs