跨 Rabbit MQ 的 Instrumentation C#

Instrumentation C# across Rabbit MQ

我有一个 WPF 应用程序和一个从客户端应用程序获取队列中消息的工作进程。

有多个用户可以单击多个项目,从而将多个进程发送到队列中,因此我需要为每个用户提供某种唯一 ID。

我想为此实现检测日志记录,但我发现很难为进程设置一个主键或 ID。我有可以用作 ID 的消息 ID,但在调用方法时会丢失,我不想将它传递给每个方法。

例如,如果过程如下:

  1. 用户点击数据检索按钮
  2. 使用消息 ID 创建消息 -> 使用消息 ID 登录检测
  3. Worker 使用 Message Id 提取消息 -> 使用相同的消息 ID 登录 instrumentation
  4. 已调用数据检索方法(无消息 ID)-> 无法记录

基本上我不想将消息 ID 传递到每个方法(例如第 4 步),因为那样会变得非常混乱。

我正在使用 Castle Proxies 来处理日志记录,但还是找不到一个很好的方法来为日志设置一个通用 ID,这样我就可以记录一个请求,并记录每个部分所花费的时间。

我有一些与此非常相似的东西: Instrumentation With Interceptors

但是除了调用每个方法的 ID 之外,我还需要一个整体 ID 来将整个请求组合在一起。

据我所知有两个选项: 1. 我不确定您的记录器是如何实现的。您可能需要注入记录器工厂。或者,2. 如果没有并行代码,则考虑用户使用 ThreadStatic。或 CallContext.GetLogicalData 对于 TPL。但它看起来有点乱,特别是对于 TPL 你需要维护一个上下文。