design-patterns - 跟踪跨分布式/传统系统的数据流
问题描述
我有 2 个微服务 [A,B],服务 [B] 与遗留系统 [C] 集成。服务 [B] 通常会生成唯一标识符并将其包含在流中到 [C] 中,也将其传递回 [A]。以这种方式在系统之间处理协调。
当需要 [A] 必须并行调用以通知 [C] 的服务 [D] 时,问题才真正开始。
虽然让 [A] 生成唯一标识符并将其发送给 [B] 和 [D] 以解决问题是有意义的,但由于 [C] 中的更改成本,这并不容易。所以我们仍然需要以某种方式让 [B] 的唯一标识符可用于 [D] 以结合 [C] 中的数据。
如果有解决此问题的战术模式,是否有人可以指导我。
解决方案
在没有图表的情况下跟踪所有服务有点困难,但我会尽力而为。你说 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
推荐阅读
- reactjs - setState 更新后 ReactJS 组件不重新渲染?
- email - 更改发件人的电子邮件地址
- c++ - 如何在提升循环缓冲区中一次访问所有元素?
- .net - 如何在 Azure 的 VM 上运行 .NET?
- wavesurfer.js - wavesurfer.js 尝试在区域中设置句柄样式
- asp.net-mvc - c# .net5 动态前缀url 使前缀因访问时搜索多次变化
- python - python _thread 返回第一个 arg 必须是可调用的
- angular - 如何在 Angular 服务中本地保存 Apollo 响应?
- android - Kotlin 捕获图像并将其存储在本地
- postgresql - PostgreSQL 为有序查询选择了错误的多列索引