问题描述
我计划开发一个事件驱动的微服务。
-
我创建了一个 protobuf 项目,它定义了几种类型的消息。
- 员工留言
- 用户留言
- 处理消息
- 申请人消息
-
然后,我将 protobuf 项目编译为不同的语言,例如红宝石、Golang。
-
然后,上游应用程序会将以下类型的事件推送到 SNS,将 SNS 扇出消息推送到由不同下游消费者拥有的多个 SQS。
-
然后,下游应用程序使用来自 SQS 的消息。
这是显示整个架构的图表。
在实施时,我意识到没有办法。不同类型的 Protobuf 消息发布到 SNS,消费者不知道每条消息的类型,也无法对其进行解码。
问题
-
您如何实现事件驱动的微服务?每种类型的消息是否都有自己的 SNS(流)?
-
有没有办法让我将不同的消息类型推送到同一个 SNS(流)?是否需要在有效载荷前附加消息类型?
解决方法
在您的 protobuf 架构中,设计要发送到 SNS 的消息,如下所示:
message Event {
oneof request {
EmployeeMessage employee_message = 1;
UserMessage user_message = 2;
// etc
}
}
然后让您的接收器解码 Event
并检查消息类型是否正确。
我认为这回答了您的两个问题。