您如何从MassTransit快递路线单活动中获取例外?

时间:2018-07-31 07:13:26

标签: c# asp.net-core masstransit

我有一个MassTransit路由清单,其中有一些活动可以很好地运行(我喜欢MT),但现在我想向失败的事件添加其他信息(例如错误名称和描述)。

此刻,我在活动中捕获了我的自定义异常并发送了错误的响应,该响应会按计划启动所有补偿活动,但是我似乎无法在订阅者中获取异常详细信息(添加到然后我将事件发送回传奇)。

我的活动如下:

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
                }));

我以为我可以从上下文中访问异常信息,但是我似乎找不到它,这对我来说是最后一个难题。

我开始认为我没有考虑这项权利。最终,我想将错误类型传递回路由清单,然后传递给它的传奇。

1 个答案:

答案 0 :(得分:1)

通过订阅,您的事件类型可以包括与发布的内置事件具有相同类型/名称的属性。这些属性将由MT自动添加到事件中(无需在“发送”呼叫中映射它们)。

https://github.com/MassTransit/MassTransit/blob/develop/src/MassTransit/Courier/Contracts/RoutingSlipActivityFaulted.cs#L19

因此,在您的情况下,可以将ExceptionInfo属性复制到您的事件接口中-并且在使用事件时将显示数据。

在后台,MassTransit将内置事件的JSON和您自己的事件分配合并到组合的JSON文档中。