使用nservicebus.structuremap时出现此类错误。这是我的代码。
EndPointConfig.cs
namespace NSBus.Server
{
using NServiceBus;
/*
This class configures this endpoint as a Server. More information about how to configure the NServiceBus host
can be found here: http://particular.net/articles/the-nservicebus-host
*/
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, UsingTransport<Msmq>, IWantCustomInitialization
{
public static IBus Bus { get; private set; }
public void Init()
{
ConfigureIocTool();
}
private static void ConfigureIocTool()
{
var container = new Container(y => y.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AssemblyContainingType<SanelibRegistry>();
scan.AssemblyContainingType<CommonRegistry>();
scan.AssemblyContainingType<CoreRegistry>();
scan.WithDefaultConventions();
scan.LookForRegistries();
}));
Bus = Configure.With()
.StructureMapBuilder(container)
.MsmqSubscriptionStorage()
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
}
}
}
此代码运行成功,但一段时间后我收到错误。
答案 0 :(得分:5)
由于我使用的是NServiceBus.Host,我不需要在端点配置中创建总线:
我的初始化变成这样: 由于使用了AsA_Server角色,它已经将启动时的清除队列设置为false,使用单播总线等。 将创建总线,并将在所有消息处理程序中通过DI提供。
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, UsingTransport<Msmq>, IWantCustomInitialization
{
public void Init()
{
var container = new Container(y => y.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AssemblyContainingType<SanelibRegistry>();
scan.AssemblyContainingType<CommonRegistry>();
scan.AssemblyContainingType<CoreRegistry>();
scan.WithDefaultConventions();
scan.LookForRegistries();
}));
Configure.With()
.StructureMapBuilder(container)
.MsmqSubscriptionStorage();
}
}
有关详细信息,请参阅: http://particular.net/articles/the-nservicebus-host(部分内置配置)以及 http://particular.net/articles/containers
此外,对于订阅存储,建议使用RavenDB或NHibernate(sql storage)进行生产,而不是msmq。
希望这有帮助,
Nikunj Balar