在这篇教程中我们将学习如何创建一个非常简单的由客户端向服务端发送消息的订单系统。该系统包括三个项目: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 告诉你它无法找到需要的队列,它将自动为你创建。
敬请期待。
新闻热点
疑难解答