【问题标题】:How can you get the exception from a MassTransit courier routing slip activity?如何从 MassTransit 快递路线单活动中获得例外?
【发布时间】:2018-07-31 23:55:47
【问题描述】:

我有一个 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
                }));

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

我开始认为我没有考虑到这一点。最终我想将错误类型传递回路由单,然后传递给它正在调用的 saga。

【问题讨论】:

    标签: c# asp.net-core masstransit


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 做到了。为了不将我的接口/合同包绑定到 MassTransit,我只是将 ExceptionInfo 添加为动态属性,所有信息都会通过。
    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多