在這篇教程中我們將學習如何創建一個非常簡單的由客戶端向服務端發送消息的訂單系統。該系統包括三個項目:Client、Server 和 Messages,我們將按照以下步驟來完成這個任務。
完整的解決方案代碼可以在這裡下載。
讓我們開始創建 Client 項目,它將負責發送訂單請求到一個 NServiceBus 終結點(Endpoint)。
以管理員權限運行 Visual Studio,添加一個名叫“Ordering.Client”的類庫項目,並且將解決方案命名為“Ordering”。
我們現在需要引用 NServiceBus 的程序集,最快的方式是使用 NuGet 包管理控制台。
打開 NuGet 包管理控制台:
輸入以下命令:
PM> Install-Package NServiceBus.Host
注:需要重新加載項目
包安裝程序將引用 NServiceBus 程序集並在 Client 項目中創建幾個模板文件。
例如,“EndpointConfig.cs” 被用來配置項目的終結點,並且自動應用了服務端配置。
為了將配置修改為客戶端配置,我們需要打開“EndpointConfig.cs”文件並修改以下代碼:
namespace Ordering.Client { public class EndpointConfig : IConfigureThisEndpoint, AsA_Server { } }
修改後的代碼如下:
namespace Ordering.Client { public class EndpointConfig : IConfigureThisEndpoint, AsA_Client { } }
注:僅繼承的基類由 AsA_Server 修改為 AsA_Client。
稍後我們將在 Client 項目中添加更多代碼,現在讓我們先把焦點放在如何處理訂單請求上面。
首先添加一個名叫“Ordering.Messages”的類庫項目。
該項目將包含消息定義,並且將由客戶端和服務端共享,這樣兩邊都將獲得強類型的消息描述。
在該項目中安裝“NServiceBusInterfaces”NuGet包,在包管理控制台,輸入以下命令:
PM> Install-Package NServiceBus.Interfaces -ProjectName Ordering.Messages
添加一個“PlaceOrder.cs”文件,在其中添加以下代碼:
namespace Ordering.Messages { public class PlaceOrder : ICommand { public Guid Id { get; set; } public string Product { get; set; } } }
現在我們可以開始創建處理訂單的服務端,首先添加一個名為“Ordering.Server”的類庫項目。
為該項目安裝“NServiceBusHost”NuGet包,在包管理控制台,輸入以下命令:
PM> Install-Package NServiceBus.Host -ProjectName Ordering.Server
注:需要重新加載項目
添加對 Messages 項目的引用,以便服務端解釋消息內容。
添加一個“PlaceOrderHandler.cs”文件,向其中寫入以下代碼:
namespace Ordering.Server { public class PlaceOrderHandler : IHandleMessages<PlaceOrder> { public IBus Bus { get; set; } public void Handle(PlaceOrder message) { Console.WriteLine(@"Order for Product:{0} placed with id: {1}", message.Product, message.Id); } } }
我們差不多快做好了,現在唯一剩下的就是回到 Client 項目中,添加對 Messages 項目的引用,並添加一個“SendOrder.cs”文件,向其中寫入以下代碼:
namespace Ordering.Client { public class SendOrder : IWantToRunWhenBusStartsAndStops { public IBus Bus { get; set; } public void Start() { Console.WriteLine("Press 'Enter' to send a message.To exit, Ctrl + C"); while (Console.ReadLine() != null) { var id = Guid.NewGuid(); Bus.Send("Ordering.Server", new PlaceOrder() { Product = "New shoes", Id = id}); Console.WriteLine("=========================================================================="); Console.WriteLine("Send a new PlaceOrder message with id: {0}", id.ToString("N")); } } public void Stop() { } } }
注:以上代碼基於 4.x 版本,若使用 3.x 版本需要使用 “IWantToRunAtStartup”接口。
已經完成編碼了,現在是時候運行解決方案了。
在解決方案中設置啟動項目,將 Client 和 Server 項目設置為同時運行。
最後點擊 F5 按鈕運行解決方案,即可看到整個系統。
將會有兩個控制台應用程序啟動,在客戶端控制台中按下回車,將在服務端窗口中看到“Order for Product: New shoes placed”。
如果你在控制台中看到警告,不用擔心,這些警告只是 NServiceBus 告訴你它無法找到需要的隊列,它將自動為你創建。
敬請期待。