在這篇教程中我們將學(xué)習(xí)如何創(chuàng)建一個非常簡單的由客戶端向服務(wù)端發(fā)送消息的訂單系統(tǒng)。該系統(tǒng)包括三個項(xiàng)目:Client、Server 和 Messages,我們將按照以下步驟來完成這個任務(wù)。
完整的解決方案代碼可以在這里下載。
讓我們開始創(chuàng)建 Client 項(xiàng)目,它將負(fù)責(zé)發(fā)送訂單請求到一個 NServiceBus 終結(jié)點(diǎn)(Endpoint)。
以管理員權(quán)限運(yùn)行 Visual Studio,添加一個名叫“Ordering.Client”的類庫項(xiàng)目,并且將解決方案命名為“Ordering”。
我們現(xiàn)在需要引用 NServiceBus 的程序集,最快的方式是使用 NuGet 包管理控制臺。
打開 NuGet 包管理控制臺:
輸入以下命令:
PM> Install-Package NServiceBus.Host
注:需要重新加載項(xiàng)目
包安裝程序?qū)⒁?NServiceBus 程序集并在 Client 項(xiàng)目中創(chuàng)建幾個模板文件。
例如,“EndpointConfig.cs” 被用來配置項(xiàng)目的終結(jié)點(diǎn),并且自動應(yīng)用了服務(wù)端配置。
為了將配置修改為客戶端配置,我們需要打開“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 項(xiàng)目中添加更多代碼,現(xiàn)在讓我們先把焦點(diǎn)放在如何處理訂單請求上面。
首先添加一個名叫“Ordering.Messages”的類庫項(xiàng)目。
該項(xiàng)目將包含消息定義,并且將由客戶端和服務(wù)端共享,這樣兩邊都將獲得強(qiáng)類型的消息描述。
在該項(xiàng)目中安裝“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; } }}現(xiàn)在我們可以開始創(chuàng)建處理訂單的服務(wù)端,首先添加一個名為“Ordering.Server”的類庫項(xiàng)目。
為該項(xiàng)目安裝“NServiceBusHost”NuGet包,在包管理控制臺,輸入以下命令:
PM> Install-Package NServiceBus.Host -ProjectName Ordering.Server
注:需要重新加載項(xiàng)目
添加對 Messages 項(xiàng)目的引用,以便服務(wù)端解釋消息內(nèi)容。
添加一個“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); } }}我們差不多快做好了,現(xiàn)在唯一剩下的就是回到 Client 項(xiàng)目中,添加對 Messages 項(xiàng)目的引用,并添加一個“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”接口。
已經(jīng)完成編碼了,現(xiàn)在是時候運(yùn)行解決方案了。
在解決方案中設(shè)置啟動項(xiàng)目,將 Client 和 Server 項(xiàng)目設(shè)置為同時運(yùn)行。

最后點(diǎn)擊 F5 按鈕運(yùn)行解決方案,即可看到整個系統(tǒng)。
將會有兩個控制臺應(yīng)用程序啟動,在客戶端控制臺中按下回車,將在服務(wù)端窗口中看到“Order for Product: New shoes placed”。

如果你在控制臺中看到警告,不用擔(dān)心,這些警告只是 NServiceBus 告訴你它無法找到需要的隊(duì)列,它將自動為你創(chuàng)建。
敬請期待。
新聞熱點(diǎn)
疑難解答
圖片精選