事件驱动微服务:如何将不同类型的 protobuf 消息发送到一个 AWS SNS流?

问题描述

我计划开发一个事件驱动的微服务。

  1. 我创建了一个 protobuf 项目,它定义了几种类型的消息。

    • 员工留言
    • 用户留言
    • 处理消息
    • 申请人消息
  2. 然后,我将 protobuf 项目编译为不同的语言,例如红宝石、Golang。

  3. 然后,上游应用程序会将以下类型的事件推送到 SNS,将 SNS 扇出消息推送到由不同下游消费者拥有的多个 SQS。

  4. 然后,下游应用程序使用来自 SQS 的消息。

这是显示整个架构的图表。

enter image description here

在实施时,我意识到没有办法。不同类型的 Protobuf 消息发布到 SNS,消费者不知道每条消息的类型,也无法对其进行解码。

问题

  1. 您如何实现事件驱动的微服务?每种类型的消息是否都有自己的 SNS(流)?

  2. 有没有办法让我将不同的消息类型推送到同一个 SNS(流)?是否需要在有效载荷前附加消息类型?

解决方法

在您的 protobuf 架构中,设计要发送到 SNS 的消息,如下所示:

message Event {
  oneof request {
    EmployeeMessage employee_message = 1;
    UserMessage user_message = 2;
    // etc
  }
}

然后让您的接收器解码 Event 并检查消息类型是否正确。

我认为这回答了您的两个问题。