我们使用MassTransit的IConsumeObserver
要注意消费故障。这是代替消耗所有Fault
事件服务的,因为我们使用了Azure的服务总线,这doesn't support polymorphic messaging
正如我们已经有了配置重试,我们已经注意到,ConsumeFault<T>()
块在每个重试被输入。
我们正在寻找一种方法来确定,如果我们或出重试的;进入GetRetryAttempt()
。
我们使用示例:
public virtual async Task ConsumeFault<T>(ConsumeContext<T> context, Exception exception) where T : class
{
if (context.GetRetryAttempt() <= 0)
{
await NotifyFault());
}
}
我们已经观察到的(哈哈),其GetRetryAttempt()
总是等于0,如在comment on a similar question也指出,
有另一种方式来确定何时我们不再重试?还是另辟蹊径,走当且仅当重一些行动已经用尽?
正如克里斯·帕特森here指出
下面需要考虑到
e.g:
Bus.Factory.CreateUsingAzureServiceBus(
sbc =>
{
var host = ConfigureServiceBus(servicePath, sbc);
sbc.SubscriptionEndpoint<T>(host, subscriptionName, ec =>
{
ec.UseMessageRetry(x => x.Interval(int.Parse(ConfigurationManager.AppSettings[RetryConfigConstants.ServiceBusRetryCount]), TimeSpan.FromMilliseconds(double.Parse(ConfigurationManager.AppSettings[RetryConfigConstants.ServiceBusRetryInterval]))));
ec.Consumer<EventConsumer<T>>(context);
if (timeToLive != default(TimeSpan))
{
ec.AutoDeleteOnIdle = timeToLive;
}
});
})
最后,我在autofac我自己的代码w.r.t消费者登记发现的错误。我的下iBus实例是使用SingleInstance注册,而不是InstancePerLifetimeScope(这是我的用户和观察者如何进行注册)