【问题标题】:Message-completion results from a consumer back to a producer消息完成结果从消费者返回到生产者
【发布时间】:2019-01-29 14:48:06
【问题描述】:

我们正在构建一个具有微服务架构的应用程序。

微服务架构将遵循面向消息的模式,使用 AWS SQS。

我们希望将消费者服务的完成结果返回给生产者服务。

这是我们正在考虑的算法:

  1. 生产者创建具有唯一 ID 的消息
  2. 生产者订阅以消息 ID 命名的 Redis 频道
  3. 生产者将消息放入 SQS 队列
  4. 消费者从 SQS 队列中移除消息并执行操作
  5. 消费者将操作结果发布到以消息id命名的Redis通道
  6. 生产者收到完成结果并恢复执行

这是将消息完成结果从消费者传回生产者的合理方式吗?

【问题讨论】:

  • 如何创建一个响应队列,消费者将所有响应放在这个队列中?生产者和侦听器线程正在运行,将在收到响应消息后开始进一步处理。这样您就可以避免每条消息都排队。
  • 我喜欢这个主意。我们的应用程序将有许多大规模生产者,您认为这对 SQS 来说会是一个问题吗,在单个(响应)队列上为(可能)成千上万的同时监听器提供服务?另外,我的印象是 Redis 能够为每条消息处理一个通道的使用,你不这么认为吗?
  • 我认为,如果您拥有数千个频道或 1 个频道拥有数千个听众,这并不重要。这两种情况都会以相同的方式使您的代理紧张,然后可以通过集群和横向扩展来处理。在这种情况下,您可以通过比较实施的难易程度来选择一种方法。
  • 我的理解是您cannot filter messages based on a message attribute in SQS,这似乎排除了在单个 SQS 队列上大规模使用数千个侦听器。我错了吗?还是我误解了你的建议?

标签: redis aws-lambda microservices message-queue amazon-sqs


【解决方案1】:

经过继续研究,很明显消息队列不是解决方案的一部分。 this article 中的第 5 点,“......或者甚至不关心结果......”暗示(暗示)我们只是使用了错误的方法。

我们更改了设计,使请求排序不再重要,并将使用调用 api 直接调用 AWS Lambda 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多