每个事件生产者一个主题 VS 多个生产者消息架构共享一个主题

One topic per event producer VS One topic shared across multiple producers messaging architecture

这是一个有点笼统的问题,因为它不仅适用于我的场景(使用 Azure 服务总线),而且适用于 publish/subscribers 上下文中的任何事件总线和事件。

问题是:是否有任何偏好 architecture/topology 生产者之间不得共享主题? 换句话说:每个事件生产者一个主题 VS 多个生产者共享一个主题?

我有一个明确的偏好:一个主题应该只由一个制作人拥有和访问,如果其他制作人也应该拥有和访问。但我似乎是一个团队中唯一有这种观点的人,而其他人在不同的活动制作人之间分享相同的话题似乎没有任何问题"for simplicity",我真的不能争论 技术可行性..

我希望能从更技术性的角度找到有价值的答案和良好实践,因为我的推理是从更 business/organization 的角度出发的,因为我有 DDD 背景,而其他人没有't..

如您所见,从 DDD-ish 的角度来看,需要在同一主题中发布的多个生产者会引发设计气味。我并不是说它不能完成,我试图从技术角度找出是否也应该避免它。

有人对此有一些实践经验吗?

PS:有但我不认为它完全一样,因为Kafka对发布者-订阅者使用不同的技术方法


更新 1:我不知道 NServiceBus,但我在 MassTransit 上工作过一些,当利用拓扑创建到 MassTransit 时(这是 afaik 的唯一方式),它不仅为每个生产者创建不同的主题,而且每个消息类型。

再补充几个我认为我们应该尽可能多地为每个制作人使用一个主题的原因:

  • 如果多个生产者将同一个事件发布到同一个主题,则没有明确的事件归属和权限。这与您关于限界上下文的观点相似。
  • 当多个生产者发布同一个事件时,它会在这些生产者之间创建一个事件模式耦合。现在,如果不立即影响所有生产者,就无法发展事件模式。这些生产者可以使用事件模式版本控制,但是当多个生产者更新相同的事件模式(并产生不同版本的事件模式)时仍然存在争用