0

使用 pub/sub 示例,我设法让同一个控制台应用程序的多个实例读取从发布者发送的所有消息。我所做的是:

namespace Subscriber1

{ 公共类 EndpointConfig :IConfigureThisEndpoint,AsA_Server { }

public class OverrideInputQueue : IWantCustomInitialization
{
    public void Init()
    {
        Configure
            .Instance
            .Configurer
            .ConfigureComponent<MsmqTransport>(NServiceBus.ObjectBuilder.ComponentCallModelEnum.None)
            .ConfigureProperty(p => p.InputQueue, Guid.NewGuid());


    }
}

}

我如何设置一个 wpf 应用程序以使多个实例都读取来自发布者的通知?

使用上面的代码对我没有用,因为这些代码行永远不会被命中。

在我的 wpf 应用程序中,我引用了 NServiceBus 主机,我将它添加到后面的 windows 代码中:

        public Window1()
    {
        InitializeComponent();
        this.Title = App.AppId.ToString();

        var bus = NServiceBus.Configure.With()
                .DefaultBuilder()
                .XmlSerializer()
                .MsmqTransport()
                    .IsTransactional(true)
                    .PurgeOnStartup(false)
                .UnicastBus()
                    .ImpersonateSender(false)
                    .LoadMessageHandlers()
                .CreateBus()
                .Start();
    }

我将“OverrideInputQueue:IWantCustomInitialization”部分放在我的端点配置中。

但正如我所说,那部分永远不会受到打击。结果是,当您启动应用程序的两个实例时,它们会轮流接收发布者发送的消息。我希望两个实例都接收所有消息。

我错过了什么?

/约翰

4

1 回答 1

1

问题是 IWantCustomInitialization 仅在使用 NServiceBus.Host.exe 进程时才相关。您需要在初始化代码中执行以下操作:

        var bus = NServiceBus.Configure.With() 
            .DefaultBuilder() 
            .XmlSerializer() 
            .MsmqTransport() 
                .IsTransactional(true) 
                .PurgeOnStartup(false) 
            .RunCustomAction( () => Configure.Instance.Configurer.ConfigureProperty<MsmqTransport>(p => p.InputQueue, Guid.NewGuid()) )
            .UnicastBus() 
                .ImpersonateSender(false) 
                .LoadMessageHandlers() 
            .CreateBus() 
            .Start(); 
于 2010-09-06T02:45:03.823 回答