NServiceBus主機概要文件

移動系統可靠地從開發到測試到生產是任何開發組織的核心能力。服務器

手動配置和代碼更改使這個過程出錯,讓版本控制系統的一個噩夢。app

NServiceBus主機提供了設施的資料專門來緩解這一過程並提供結構時,版本控制系統的配置。讀到的主機.測試

配置困難

開始NServiceBus發展並不老是一件容易的事情。有許多配置選項級別的日誌記錄、技術用於存儲用戶,和類型的事件存儲(等等)。一般狀況下,你想要一個合適的全部這些選項的組合,只要之後你能夠改變它。資料給你這種靈活性。ui

NServiceBus附帶三個配置文件的:Lite,集成和生產。每一個概要文件配置的內聚結合技術:spa

  • Lite保持在內存中全部最詳細的日誌記錄。
  • 集成利用技術接近生產但沒有擴展和更少的日誌記錄。
  • 生產使用擴展友好技術和最小的基於文件的日誌記錄。

指定配置文件來運行

告訴主機運行使用特定的配置文件,你須要經過這個概要文件的命名類型類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是給定的概要文件。例如,一個電子郵件組件

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

這種方法是特別有用,當你想要你的資料鉤到一個事件對象使用容器來構建,使您的配置文件來執行活動在應用程序的生命週期的特定點不只僅是在啓動。

相關文章
相關標籤/搜索