我正在尝试将相关 ID 从传入消息转发到传出消息。
这并不难,我只是添加了传出步骤,加载当前消息和正在处理的传入消息,并将相关 ID 读取/添加到标头。
问题是在某些情况下,我们在发送消息时使用 RebusTransactionScopeSuppressor,因为我们希望立即发送消息,在这种情况下,相同的传出步骤不起作用,因为它无法加载正在处理的消息。
我的想法是添加一些范围服务,该服务将写入correlationId并根据请求读取它。我似乎无法将服务纳入步骤上下文中。
我尝试加载
IServiceScope
,然后使用它来解决我的范围服务,如下所示
var scope = context.Load<IServiceScope>() ?? context.Load<AsyncServiceScope?>();
在我这里,挣扎就是走出去的过程。我设法让它适用于传入消息,但我似乎无法在传出上下文中找到
IServiceScope
传出上下文中没有服务范围,使用时无法获取它
RebusContextScopeSuppressor
。
我建议您使用另一种绕过 Rebus 的机制来传递相关 ID,例如一个简单的
AsyncLocal<string>
某处,可能伴随着一个实现 IDisposable
的类,以提供一种安全且简单的方法来管理“环境范围”。