使用pub / sub示例我设法获取同一控制台应用程序的多个实例,以读取发布者发送的所有消息。我做了什么呢:
namespace Subscriber1
{ public class 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();
}
我把I“OverrideInputQueue:IWantCustomInitialization”-part放在我的端点配置中。
但正如我所说那部分永远不会被击中。结果是,当您启动应用程序的两个实例时,他们轮流接收发布者发送的消息。我希望两个实例都能收到所有消息。
我错过了什么?
/约翰
答案 0 :(得分: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();