【发布时间】:2018-01-23 18:15:27
【问题描述】:
我目前正在使用 Courier 模式的 Masstransit。
我已经设置了一个可能失败的活动,我希望能够订阅这个失败并采取相应的行动。
我的问题是,即使我可以订阅失败,甚至看到导致失败的异常,我也无法向它传递任何参数。
出于测试目的,假设我有以下活动:
public class MyActivity : ExecuteActivity<MyMessage>
{
public Task<ExecutionResult> Execute(ExecuteContext<MyMessage> context)
{
try
{
// .... some code
throw new FaultException<RegistrationRefusedData>(
new RegistrationRefusedData(RegistrationRefusedReason.ItemUnavailable));
// .... some code
}
catch (Exception ex)
{
return Task.FromResult(context.Faulted(ex));
}
}
}
问题在于我作为异常参数传递的原因 (RegistrationRefusedReason)。如果我订阅 RoutingSlipActivityFaulted 消费者,我可以几乎获得我需要的所有信息:
public class ActivityFaultedConsumer : IMessageConsumer<RoutingSlipActivityFaulted>
{
public void Consume(RoutingSlipActivityFaulted message)
{
string exceptionMessage = message.ExceptionInfo.Message; // OK
string messageType = message.ExceptionInfo.ExceptionType; // OK
RegistrationRefusedReason reason = ??????;
}
}
我觉得我在这里遗漏了一些重要的东西,(也许滥用了模式?)。
还有其他方法可以从错误的活动中获取参数吗?
【问题讨论】:
-
我想如果我在活动中有一个
context.FaultedWithVariables会起作用...
标签: c# rabbitmq message-queue masstransit