因此,我们使用具有相关 ID 的通用状态上下文单例来进行集中式日志记录。目的是在整个过程中跟踪 id 并关联不同的层。
状态上下文由多个 dll 和多个用户访问。
当多线程发挥作用时,困难就来了:
- 进程 1 已被用户 1 解雇
- 相关 ID 设置为 {1}
- DLL A 访问状态上下文并获取相关 ID {1}
- 在进程 1 完成之前,进程 2 已被用户 2 解雇
- 相关 ID 设置为 {2}
- DLL B 来自第一个进程访问状态上下文,关联 ID 为 {2},它应该是 {1}
我们如何解决这个问题?
我们不认为锁定是我们的解决方案吗?还有其他想法吗?
这是一个图表
(S)->[ CorrelationID {get;set} ]
^ ^ ^
U1 <--> | | | O
U2 <--> [DLLA] <--> [DLLB] <--> [DLLC] <--> | |
U3 <-->
{Web} <--> {Domain} <-> {Data Access} <--> {DB}
(<-- Process / Thread --> )
{} = 可能的 DLL 示例
每个用户的进程应该有 1 个相关 ID