管道步骤内的 Rebus 范围服务

问题描述 投票:0回答:1

我正在尝试将相关 ID 从传入消息转发到传出消息。

这并不难,我只是添加了传出步骤,加载当前消息和正在处理的传入消息,并将相关 ID 读取/添加到标头。

问题是在某些情况下,我们在发送消息时使用 RebusTransactionScopeSuppressor,因为我们希望立即发送消息,在这种情况下,相同的传出步骤不起作用,因为它无法加载正在处理的消息。

我的想法是添加一些范围服务,该服务将写入correlationId并根据请求读取它。我似乎无法将服务纳入步骤上下文中。

我尝试加载

IServiceScope
,然后使用它来解决我的范围服务,如下所示
var scope = context.Load<IServiceScope>() ?? context.Load<AsyncServiceScope?>();

在我这里,挣扎就是走出去的过程。我设法让它适用于传入消息,但我似乎无法在传出上下文中找到

IServiceScope

rebus
1个回答
0
投票

传出上下文中没有服务范围,使用时无法获取它

RebusContextScopeSuppressor

我建议您使用另一种绕过 Rebus 的机制来传递相关 ID,例如一个简单的

AsyncLocal<string>
某处,可能伴随着一个实现
IDisposable
的类,以提供一种安全且简单的方法来管理“环境范围”。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.