有没有办法从父 Activity (System.Diagnostics) 获取所有子 Activity 对象?
Is there a way to get all children Activity objects from a parent Activity (System.Diagnostics)?
使用 System.Diagnostics.Activity
,并给出以下 C# 代码:
Activity parentActivity = Activity.Current;
有没有办法获取所有 Activity
个 parentActivity
作为其 Parent
的对象?或者其他一些方法来获取包含在当前操作中的 Activity
个对象的“树”?
恐怕这样不行。
例如,想想 .NET 中的分布式跟踪,它是 Activity API 的 built on top。微服务架构通常需要分布式跟踪,在这些架构中,服务之间并不真正了解彼此。到处都有请求,服务能做的最好的事情就是将一些元数据从传入请求传递到传出请求(并添加一些)。
这些元数据是此类 Activity ID 可以到达的地方,但服务只知道它想将请求发送到哪里(使用这些元数据),而不是它实际到达的地方。因此服务无法知道哪些 Activity 最终会将其 Activity ID 作为父 Activity ID。
只是您可以将您拥有的不同服务“载入”到某些分布式跟踪工具(如 Jaeger),一旦请求完成并且知道什么结束在哪里,它将构建您想要的所有那些美丽的树。但是你不能在 cross-service 请求中执行此操作 - 你不知道未来 :)
使用 System.Diagnostics.Activity
,并给出以下 C# 代码:
Activity parentActivity = Activity.Current;
有没有办法获取所有 Activity
个 parentActivity
作为其 Parent
的对象?或者其他一些方法来获取包含在当前操作中的 Activity
个对象的“树”?
恐怕这样不行。
例如,想想 .NET 中的分布式跟踪,它是 Activity API 的 built on top。微服务架构通常需要分布式跟踪,在这些架构中,服务之间并不真正了解彼此。到处都有请求,服务能做的最好的事情就是将一些元数据从传入请求传递到传出请求(并添加一些)。
这些元数据是此类 Activity ID 可以到达的地方,但服务只知道它想将请求发送到哪里(使用这些元数据),而不是它实际到达的地方。因此服务无法知道哪些 Activity 最终会将其 Activity ID 作为父 Activity ID。
只是您可以将您拥有的不同服务“载入”到某些分布式跟踪工具(如 Jaeger),一旦请求完成并且知道什么结束在哪里,它将构建您想要的所有那些美丽的树。但是你不能在 cross-service 请求中执行此操作 - 你不知道未来 :)