如何从 MassTransit 快递路由单 activity 中获取异常?
How can you get the exception from a MassTransit courier routing slip activity?
我有一个 MassTransit 路由单,其中包含一些运行良好的活动(我喜欢 MT),但我现在想向失败的事件添加额外的信息(即错误名称和描述)。
目前我在 activity 中捕获了我的自定义异常并发回错误响应,这会按计划启动所有补偿活动,但我似乎无法在中获取异常详细信息订户(添加到我然后发回传奇的事件)。
我的 activity 看起来像这样:
public async Task<ExecutionResult> Execute(ExecuteContext<ICreateLink> context)
{
var messageCommand = context.Arguments;
var command = new CreateLink(
messageCommand.LinkId,
messageCommand.GroupId);
try
{
await _commandDispatcher.ExecuteAsync(command).ConfigureAwait(false);
return context.Completed();
}
catch (Exception ex)
{
return context.Faulted(ex);
}
}
然后在构建路由表时我有:
builder.AddSubscription(
context.SourceAddress,
RoutingSlipEvents.ActivityFaulted,
RoutingSlipEventContents.All,
nameof(CreateLinkActivity),
x => x.Send<ICreateLinkFailed>(new CreateLinkFailed
{
LinkId = context.Message.LinkId,
LinkName = context.Message.Name
}));
我以为我可以从上下文中访问异常信息,但可惜我似乎找不到它,这是我的最后一块拼图。
我开始觉得我不是在考虑这个吧。最终我想将错误类型传回路由表,然后传给它的调用传奇。
通过您的订阅,您的事件类型可以包含与已发布的内置事件具有相同 type/name 的属性。这些属性将由 MT 自动添加到事件中(无需在发送调用中映射它们)。
因此在您的情况下,可以将 ExceptionInfo 属性 复制到您的事件接口中 - 并且该数据将在使用事件时显示。
在后台,MassTransit 将内置事件的 JSON 和您自己的事件分配合并到一个组合的 JSON 文档中。
我有一个 MassTransit 路由单,其中包含一些运行良好的活动(我喜欢 MT),但我现在想向失败的事件添加额外的信息(即错误名称和描述)。
目前我在 activity 中捕获了我的自定义异常并发回错误响应,这会按计划启动所有补偿活动,但我似乎无法在中获取异常详细信息订户(添加到我然后发回传奇的事件)。
我的 activity 看起来像这样:
public async Task<ExecutionResult> Execute(ExecuteContext<ICreateLink> context)
{
var messageCommand = context.Arguments;
var command = new CreateLink(
messageCommand.LinkId,
messageCommand.GroupId);
try
{
await _commandDispatcher.ExecuteAsync(command).ConfigureAwait(false);
return context.Completed();
}
catch (Exception ex)
{
return context.Faulted(ex);
}
}
然后在构建路由表时我有:
builder.AddSubscription(
context.SourceAddress,
RoutingSlipEvents.ActivityFaulted,
RoutingSlipEventContents.All,
nameof(CreateLinkActivity),
x => x.Send<ICreateLinkFailed>(new CreateLinkFailed
{
LinkId = context.Message.LinkId,
LinkName = context.Message.Name
}));
我以为我可以从上下文中访问异常信息,但可惜我似乎找不到它,这是我的最后一块拼图。
我开始觉得我不是在考虑这个吧。最终我想将错误类型传回路由表,然后传给它的调用传奇。
通过您的订阅,您的事件类型可以包含与已发布的内置事件具有相同 type/name 的属性。这些属性将由 MT 自动添加到事件中(无需在发送调用中映射它们)。
因此在您的情况下,可以将 ExceptionInfo 属性 复制到您的事件接口中 - 并且该数据将在使用事件时显示。
在后台,MassTransit 将内置事件的 JSON 和您自己的事件分配合并到一个组合的 JSON 文档中。