带有事件的微服务架构中的主题设计

Topic design in a microservice architecture with eventing

我正在关注 Azure Service Bus 事件的微服务架构。我需要将事件发布到主题,以便一些微服务可以处理它。

我面临三种选择。我可以只创建一个主题并将各种事件发布到该主题。或者,我可以为每个事件创建一个主题。或者,我可以为每个微服务创建一个主题。

我的问题是什么是这种情况下的最佳做法。

请注意,同一事件通常可以发布到多个主题。因此,您可以将事件发布到“每个服务的每个事件”firehose 主题和“此服务的每个事件”主题。

一般来说,您想考虑对于任何两个不相交的 types/categories 事件,是否可能存在对类型 X 感兴趣的消费者(阅读:弱于强蕴涵,更多就像一个值得下注的预测,如果回报是可以接受的)对 Y 型的兴趣?如果这看起来可能,那么一个由类型 Z(任何类型 X 或类型 Y 的事件)组成的主题值得拥有。

在许多情况下,特别是如果特定类型的事件仅由一个特定服务发出并且该服务可以做出一些排序保证,那么值得为“来自该服务的每个事件”创建一个主题,然后有一个该主题的消费者将消息重新混合到适当的其他主题中。