为了账号安全,请及时绑定邮箱和手机立即绑定

您如何从 MassTransit 快递路线单活动中获得异常?

您如何从 MassTransit 快递路线单活动中获得异常?

C#
天涯尽头无女友 2021-11-07 19:53:22
我有一个 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。
查看完整描述

1 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

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

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

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

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


查看完整回答
反对 回复 2021-11-07
  • 1 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信