当从处理程序调用的代码中发生异常时,主机会尝试 5 次,然后使用以下消息关闭服务:
2013-10-17 08:57:12,091 [13] FATAL NServiceBus.Faults.Forwarder.FaultManager [(null)] - 无法将失败的消息转发到错误队列。Autofac.Core.Registration.ComponentNotRegisteredException:请求的服务“NServiceBus.Transports.ISendMessages”尚未注册。要避免此异常,请注册一个组件以提供服务,使用 IsRegistered() 检查服务注册,或使用 ResolveOptional() 方法解决可选依赖项。2013-10-17 08:57:12,139 [13] FATAL NServiceBus [(null)] - 故障管理器无法处理 ID 为 e0fc75b2-4eef-4f90-a450-a25901130c9a System.InvalidOperationException 的失败消息:无法将失败消息转发到错误队列。---> Autofac.Core.Registration.ComponentNotRegisteredException:请求的服务'NServiceBus.Transports。ISendMessages' 尚未注册。要避免此异常,请注册一个组件以提供服务,使用 IsRegistered() 检查服务注册,或使用 ResolveOptional() 方法解决可选依赖项。
这是我的配置:
<configSections>
<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />
<UnicastBusConfig ForwardReceivedMessagesTo="audit">
<MessageEndpointMappings />
</UnicastBusConfig>
这是我的总线初始化代码:
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, AsA_Publisher, UsingTransport<Msmq>
{
}
NServiceBus.SetLoggingLibrary.Log4Net(log4net.Config.XmlConfigurator.Configure);
NServiceBus.Unicast.Config.ConfigUnicastBus busConfig = Configure.With()
.Log4Net()
.DefaultBuilder()
.MsmqSubscriptionStorage()
.UnicastBus();
Bus = busConfig.CreateBus().Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
我不太确定为什么它在失败 5 次后无法尝试 SLR,并且在那之后也将其转发到错误队列。
任何帮助表示赞赏!
谢谢普拉萨德