首页 > 解决方案 > 跟踪跨分布式/传统系统的数据流

问题描述

我有 2 个微服务 [A,B],服务 [B] 与遗留系统 [C] 集成。服务 [B] 通常会生成唯一标识符并将其包含在流中到 [C] 中,也将其传递回 [A]。以这种方式在系统之间处理协调。

当需要 [A] 必须并行调用以通知 [C] 的服务 [D] 时,问题才真正开始。

虽然让 [A] 生成唯一标识符并将其发送给 [B] 和 [D] 以解决问题是有意义的,但由于 [C] 中的更改成本,这并不容易。所以我们仍然需要以某种方式让 [B] 的唯一标识符可用于 [D] 以结合 [C] 中的数据。

如果有解决此问题的战术模式,是否有人可以指导我。

标签: design-patternsdomain-driven-designdistributed-systemlegacy-codecross-cutting-concerns

解决方案


在没有图表的情况下跟踪所有服务有点困难,但我会尽力而为。你说 C 在当前进程中将标识符传回给 A,所以我假设这个调用结构

A -> B (create ID) -> C -> A

现在你要介绍

A -> D -> C -> A

并且您需要 C 知道来自 ADC 路径的哪个消息与来自 ABC 路径的哪个消息相关。那是对的吗?

最好的解决方案是让A为每个人创建ID,像这样

A (Create ID) -> B (use ID given by A) -> C -> A
A (Use same ID) -> D -> C -> A

如果您无法更改代码以在 A 服务中创建单个 ID,请尝试使用 2 个不同的消息 ID。这会很笨拙,因为您需要在某个地方进行存储,因此您可以判断 msg123 与 msgABC 来自同一来源,但它可以解决问题。

这会给你

A -> B (create ID1) -> C -> A
A (Create ID2) -> D -> C -> A

推荐阅读