【发布时间】:2018-01-11 04:52:44
【问题描述】:
假设您有一个微服务架构,其中多个服务产生和使用 unit 状态。
有多种设计方法,您会推荐哪一种?
这些是我想到的一些选项:
- 创建一个通用主题
unit-status并让服务消费和产生关于这个主题的消息。这会导致您使用自己的消息并且必须过滤它们。我认为这是一个肮脏的解决方案,但对于新的新消费者来说很容易获得所有单元状态事件。 - 为每个状态创建一个特定主题,例如
unit-status-created、unit-status-packaged、unit-status-loaded、unit-status-deleted等。每个服务仅在其自己的主题上生成,但可以从主题列表中消费,不包括它自己的。例如,加载服务将从列表中消耗(unit-status-created、unit-status-deleted、unit-status-packaged)。这允许服务仅对特定事件表现出兴趣,但是当添加新的状态主题时,可能需要对所有服务进行代码或配置更改。 - 为每个状态赋予它自己的分区,并从所有分区中使用,除了您在其中生成的那个。这种设计使事情变得更加复杂(记账哪个分区包含特定状态),添加分区时不会自动平衡,在活动时添加分区使事情变得更加冒险,因此没有我的偏好。
【问题讨论】:
-
您能解释一下您是如何在消费者服务中使用单位状态的吗?
-
@WillC 考虑两个服务 unit-packing 和 unit-shipping。 unit-packing 服务为一个单元发出一个 unit-packed 状态。单位运输服务使用该状态并允许从该点开始运输。一旦发货,它也会发出状态 unit-shipped。另一个(customer-service-service)想要跟踪所有单元的状态,并且还消耗来自单元状态主题的所有状态。
-
为什么删除服务需要从其他主题中消费,例如选项 2 示例中的 unit-status-created 和 unit-status-packaged?
-
@WillC 这确实是一个不好的例子,我已经更新了问题并将删除服务更改为加载服务。它想知道哪些单元被打包,因为这样它就可以开始加载过程。当单位被删除时,它可以清理它的状态。一旦加载一个单元,它就会产生单元加载事件
-
很好奇你最终会在这里做什么@Christophe - 我现在面临同样的决定(但使用 SNS)。选项 1 成功了吗?
标签: apache-kafka activemq messaging microservices tibco-ems