NServiceBus:“无法设置key的值:ScaleOut.UseSingleBrokerQueue。”

时间:2014-01-31 08:07:42

标签: nservicebus

使用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());           
    }    
}

}

此代码运行成功,但一段时间后我收到错误。

1 个答案:

答案 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