从 AMQP 迁移到 Amazon SNS/SQS - 需要了解概念

Migrate from AMQP to Amazon SNS/SQS - need to understand concepts

我对 RabbitMQ 和 AMQP 协议有丰富的经验,并构建了一个具有命令、请求和事件模式的系统。

现在我要在 AWS Lambda 上构建一个系统 运行 并因此使用 SNS、SQS 等。我想了解这些东西之间的 "mapping"。

什么相当于 AMQP 中的交换?什么相当于路由键?

如何在 SNS 和 SQS 中为扇出、直接和主题​​交换(或类似)设置队列绑定?

其他人是怎么处理的?在我看来,RabbitMQ 是一种为满足消息总线的通常需求而构建的工具,其中 AWS 提供块,您必须自己 setup/build 该功能。我说得对吗?

What are the equivalent to an exchange in AMQP?

最接近的概念可能是 SNS,因为您可以配置 SNS topic 以发布到 n SQS 队列。然后,当您写入该主题时,每个订阅的队列都会收到一条消息。如果您愿意,也可以将消息直接写入 SQS 队列。

What are the equivalent to a routing key?

没有真正的等价物。 SNS-to-SQS 绑定不允许任何额外的 filtering/control 除了 topic-to-queue 绑定。您可以通过拥有多个 SNS 主题来近似路由,即每个主题都是 "routing key".

How to set up queue bindings for fanout, direct and topic exchanges (or similar) in SNS and SQS?

  • Fanout:写入 SNS 主题,每个订阅的队列将收到相同的消息。
  • 直接:直接写入 SQS 队列或仅订阅了这些队列的 SNS 主题。
  • 主题:创建 SNS 主题并相应地订阅队列。

How did other people handle this?

我在使用 AWS 消息传递之前使用过 RabbitMQ,所以我经历了同样的学习曲线。 AWS 没有提供那么多 exchange/routing 花里胡哨的东西,但根据我的经验,您可以 足够接近 通过 SNS 主题和 SQS 队列的某种组合。

看起来 AWS IoT 服务及其 MQTT 提供了我需要的东西来执行类似于 RabbitMQ 提供的路由规则!