移动系统可靠地从开发到测试到生产是任何开发组织的核心能力。服务器
手动配置和代码更改使这个过程出错,让版本控制系统的一个噩梦。app
NServiceBus主机提供了设施的资料专门来缓解这一过程并提供结构时,版本控制系统的配置。读到的主机.测试
开始NServiceBus发展并不老是一件容易的事情。有许多配置选项级别的日志记录、技术用于存储用户,和类型的事件存储(等等)。一般状况下,你想要一个合适的全部这些选项的组合,只要之后你能够改变它。资料给你这种灵活性。ui
NServiceBus附带三个配置文件的:Lite,集成和生产。每一个概要文件配置的内聚结合技术:spa
告诉主机运行使用特定的配置文件,你须要经过这个概要文件的命名类型类NServiceBus主机做为一个命令行参数。指定Lite概要文件,以下:命令行
NServiceBus.Host.exe NServiceBus.Lite
你可能会担忧使用命令行参数。注意,当安装NServiceBus主机做为一个Windows服务,全部提供资料被烤成安装。第二,坐在一个测试人员工做站和打开和关闭各类行为而无需改动配置文件或代码使隔离错误更加容易。它可能须要一些时间来适应,但好处是值得的。版本控制
若是你只是运行主机不指定一个概要文件,NServiceBus默认为生产资料。你能够经过尽量多的资料和NServiceBus运行。调试
写一个配置文件很是简单,定义一个实现类 NServiceBus.IProfile
标记接口。这里有一个例子:日志
namespace YourNamespace { public class YourProfile : NServiceBus.IProfile { } }
告诉主机运行您的概要文件和NServiceBus Lite概要:code
NServiceBus.Host.exe YourNamespace.YourProfile NServiceBus.Lite
如您所见,这个概要文件自己不包含任何行为自己。这只是一个方面,能够链接不一样类型的行为。看到这些行为是如何链接到我的资料。
提供的行为在一个配置文件,实现 NServiceBus.IHandleProfile<T>
接口的地方 T
是给定的概要文件。例如,一个电子邮件组件
设置以下:
class LiteEmailBehavior : IHandleProfile<NServiceBus.Lite> { public void ProfileActivated() { // set the NullEmailSender in the container } } class IntegrationEmailBehavior : IHandleProfile<NServiceBus.Integration> { public void ProfileActivated() { // set the FileEmailSender in the container } } class ProductionEmailBehavior : IHandleProfile<NServiceBus.Production> { public void ProfileActivated() { // set the SmtpEmailSender in the container } }
使用这些类,切换配置文件不只改变NServiceBus的行为也是你本身的应用行为做为一组一致。没有担忧保持一个配置文件的不一样部分同步或更改您的应用程序使用的配置文件。您还能够有多个类提供相同的概要文件的行为,或者你能够有一个单独的类处理多个概要文件(经过实现 IHandleProfile<T>
每一个概要���件类型)若是你想要在配置文件相同的行为。
您可能但愿细微变化的行为基于类实现的属性 IConfigureThisEndpoint
。一样,你不必定要全部概要文件处理程序依赖于实现的类型 IConfigureThisEndpoint
,只是为了检查是否也实现其余接口。主机自己这当它处理出版商。端点不发布不须要订阅存储。那些出版商须要配置不一样的存储技术,基于配置文件。正如主机定义了 AsAPublisher
接口和定制的行为,你也能够用你本身的接口。
一个概要文件处理程序来访问实现类型 IConfigureThisEndpoint
,它必须实现 IWantTheEndpointConfig
像这样:
class MyProfileHandler : IHandleProfile<MyProfile>, IWantTheEndpointConfig { public void ProfileActivated() { if (Config is AnInterfaceICareAbout) { // set something in the container } else { // set something else in the container } } public IConfigureThisEndpoint Config { get; set; } }
这容许您扩展主机和编写额外的概要文件和行为来定制您的系统的各个方面,同时保持松散耦合和系统的各个部分之间的可组合性。
日志记录是另外一种行为,你能够改变从一个配置文件到另外一个地方。然而,不像其余配置文件的行为,定义日志级别和下沉须要配置其余组件以前,甚至在容器中。所以,日志配置分开其余配置文件的行为。
日志行为显示了三个内置的配置文件配置:
配置文件
appender
阈值
lite
控制台
调试
集成
控制台
信息
生产
滚动的文件
可配置,默认警告
当生产情况下运行,日志写入日志文件的exe在同一个目录下。1 mb的文件增加到最大值,而后建立一个新文件。最多10个文件,而后举行最古老的文件删除。若是没有配置,日志阈值警告。配置日志阈值经过包括如下代码在应用程序配置文件:
<configSections> <section name="Logging" type="NServiceBus.Config.Logging, NServiceBus.Core" /> </configSections> <Logging Threshold="ERROR" />
修改配置有影响,必须从新启动的过程。
若是你想要不一样的日志行为比这些,请参阅下一节。
指定日志对于给定的资料,编写一个实现类 IConfigureLoggingForProfile<T>
在哪里 T
概要文件类型。该接口的实现是相似的描述 IWantCustomLogging
在页面.
class YourProfileLoggingHandler : IConfigureLoggingForProfile<YourProfile> { public void Configure(IConfigureThisEndpoint specifier) { // setup your logging infrastructure then call NServiceBus.SetLoggingLibrary.Log4Net(null, yourLogger); } }
这里,主机经过你实现类的实例 IConfigureThisEndpoint
因此你不须要实现 IWantTheEndpointConfig
.
重要的是:当你能够有一个类为多个概要文件类型配置日志记录,你不可能拥有不止一个类为相同的概要文件配置日志记录。NServiceBus只能容许一个类的全部概要文件类型经过命令行。
看到日志文档得到更多信息。
偶尔在你的资料处理程序,您可能想要使用容器来构建一个对象。惟一的问题是,必要的类型可能还没有被注册,因此你要等到初始化完成。你能够告诉NServiceBus打电话给你在那个阶段配置过程的实现IWantToRunWhenConfigurationIsComplete
接口:
class MyProfileHandler : IHandleProfile<MyProfile>, IWantToRunWhenConfigurationIsComplete { public void ProfileActivated() { _wasActivated = true; // configure the object } public void Run() { if (!_wasActivated) return; var obj = Builder.Build<SomeType>(); // do something with the object } static bool _wasActivated; public IBuilder Builder { get; set; } }
这种方法是特别有用,当你想要你的资料钩到一个事件对象使用容器来构建,使您的配置文件来执行活动在应用程序的生命周期的特定点不只仅是在启动。