我们正在开发具有事件驱动架构的物联网云解决方案。
设备产生事件并通过事件代理与消费者进行通信。所有事件消息均以 JSON 格式序列化。这些设备还侦听云到设备的消息。
我们希望为所有事件消息定义一个标准模式,例如以下格式:
{
"metaData": {
"eventId": "a492e40d-6950-4e89-b27c-8b2e27cbf19d",
"timestamp": "09/19/2024, 11:56:12",
...
},
"data": {
...
}
}
这种格式的模式应该在多个存储库中可用,用于消息的序列化(反)序列化和验证。我们认为这可以作为 JSON 模式存储在中央注册表中。
但是,我们还使用 Pydantic 模型的组合,它应该解释事件消息的
"data"
部分。这部分的组成取决于设备和消息类型,并且可能随着时间的推移而演变。这些模型应该被生产者和消费者使用。目前,它们是在生产者和消费者进口的包装中声明的。
问题是:这些嵌套模式应该如何存储和管理?它们都应该存在于模式注册表中吗?或者这也可以在代码中解决吗?架构版本是否应该出现在事件消息本身中?
这些嵌套模式应该如何存储和管理?它们都应该存在于模式注册表中吗?或者这也可以在代码中解决吗?
如果将其放入代码中,那么每次注册表更改时,您都面临着必须强制重新部署代码的风险,这本质上是配置/数据驱动的更改。
我认为最好将它们全部存储在中央注册表中,您可以在其中集中管理它们,并且拥有单一的事实来源。 我假设事件生产者和消费者都能够在需要时访问注册表。
架构版本是否应该出现在事件消息本身中?
是的,有两个字段,一个用于数据,另一个用于指定数据符合什么架构的架构。