NServiceBus主机概要文件

移动系统可靠地从开发到测试到生产是任何开发组织的核心能力。

手动配置和代码更改使这个过程出错,让版本控制系统的一个噩梦。

NServiceBus主机提供了设施的资料专门来缓解这一过程并提供结构时,版本控制系统的配置。读到的主机.

配置困难

开始NServiceBus发展并不总是一件容易的事情。有许多配置选项级别的日志记录、技术用于存储用户,和类型的事件存储(等等)。通常情况下,你想要一个合适的所有这些选项的组合,只要以后你可以改变它。资料给你这种灵活性。

NServiceBus附带三个配置文件的:Lite,集成和生产。每个概要文件配置的内聚结合技术:

  • Lite保持在内存中所有最详细的日志记录。
  • 集成利用技术接近生产但没有扩展和更少的日志记录。
  • 生产使用扩展友好技术和最小的基于文件的日志记录。

指定配置文件来运行

告诉主机运行使用特定的配置文件,你需要通过这个概要文件的命名类型类NServiceBus主机作为一个命令行参数。指定Lite概要文件,如下:

NServiceBus.Host.exe NServiceBus.Lite

你可能会担心使用命令行参数。注意,当安装NServiceBus主机作为一个Windows服务,所有提供资料被烤成安装。第二,坐在一个测试人员工作站和打开和关闭各种行为而无需改动配置文件或代码使隔离错误更加容易。它可能需要一些时间来适应,但好处是值得的。

如果你只是运行主机不指定一个概要文件,NServiceBus默认为生产资料。你可以通过尽可能多的资料和NServiceBus运行。

编写自己的配置文件

写一个配置文件非常简单,定义一个实现类 NServiceBus.IProfile标记接口。这里有一个例子:

namespace YourNamespace
{
    public class YourProfile : NServiceBus.IProfile { }
}

告诉主机运行您的概要文件和NServiceBus Lite概要:

NServiceBus.Host.exe YourNamespace.YourProfile NServiceBus.Lite

如您所见,这个概要文件本身不包含任何行为本身。这只是一个方面,可以连接不同类型的行为。看到这些行为是如何连接到个人资料。

概要文件的行为

提供的行为在一个配置文件,实现 NServiceBus.IHandleProfile<T>接口的地方 T是给定的概要文件。例如,一个电子邮件组件

  • 与Lite概要文件没有
  • 写电子邮件与集成配置文件到磁盘
  • 使用一个SMTP服务器与生产状况

设置如下:

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; }
}

这种方法是特别有用,当你想要你的资料钩到一个事件对象使用容器来构建,使您的配置文件来执行活动在应用程序的生命周期的特定点不仅仅是在启动。

posted on 2015-02-16 17:16  powerXu  阅读(249)  评论(0编辑  收藏  举报