【发布时间】:2010-08-06 21:09:27
【问题描述】:
我想在一个进程中拥有多条总线。我对此进行了谷歌搜索,发现只有拥有多个 AppDomain 才有可能。但我不能让它工作。
这是我的代码示例(我在一个类库中做所有事情):
using System;
using System.Diagnostics;
using System.Reflection;
using MyMessages;
using NServiceBus;
using NServiceBus.Config;
using NServiceBus.Config.ConfigurationSource;
namespace Subscriber1
{
public class Sender
{
public static void Main()
{
var domain = AppDomain.CreateDomain("someDomain", AppDomain.CurrentDomain.Evidence);
domain.Load(Assembly.GetExecutingAssembly().GetName());
domain.CreateInstance(Assembly.GetExecutingAssembly().FullName, typeof (PluginBusCreator).FullName);
//here I have some code to send messages to "PluginQueue".
}
}
public class PluginBusCreator
{
public PluginBusCreator()
{
var Bus = Configure.With(
Assembly.Load("NServiceBus"), Assembly.Load("NServiceBus.Core"),
Assembly.LoadFrom("NServiceBus.Host.exe"), Assembly.GetCallingAssembly())
.CustomConfigurationSource(new PluginConfigurationSource())
.SpringFrameworkBuilder()
.XmlSerializer().MsmqTransport()
.UnicastBus().LoadMessageHandlers<First<SomeHandler>>().CreateBus().Start();
}
protected IBus Bus { get; set; }
}
class PluginConfigurationSource : IConfigurationSource
{
public T GetConfiguration<T>() where T : class
{
{
if (typeof (T) == typeof (MsmqTransportConfig))
return new MsmqTransportConfig
{
ErrorQueue = "error",
InputQueue = "PluginQueue",
MaxRetries = 1,
NumberOfWorkerThreads = 1
} as T;
return null;
}
}
}
public class SomeHandler : IHandleMessages<EventMessage1>
{
public void Handle(EventMessage1 message)
{
Debugger.Break();
}
}
}
而且我没有调用处理程序。 如果您有任何想法,请提供帮助。我一直在与这个问题作斗争。 另外如果需要发布完整代码,请告知。
我需要几辆公共汽车来解决以下问题:
我有我的目标应用程序和几个插件。我们决定根据服务总线模式制作我们的插件。
每个插件可以有多个配置文件。
所以,目标应用程序(它是网络应用程序。)正在发布消息,其中发生了一些变化。订阅此消息的每个插件都需要为每个配置文件执行一些操作。但是插件对其配置文件一无所知(客户正在编写插件)。当消息处理开始时,插件应该只在其中注入配置文件。
我们决定有一些 RecepientList(模式在“企业集成模式”中描述),它知道插件配置文件,遍历它们并重新发送带有注入配置文件的消息。(因此,如果插件有多个配置文件,则多个消息将发送给它)。
但我不想在新进程中调用每个插件。完美地我想在启动期间为每个插件动态配置总线。全部在一个过程中。但似乎我需要在单独的 AppDomain 中执行此操作。所以我有一个上面描述的问题:-)。
【问题讨论】:
标签: nservicebus