NServiceBus官方文档翻译(二)NServiceBus 入门

 

在这篇教程中我们将学习如何创建一个非常简单的由客户端向服务端发送消息的订单系统。该系统包括三个项目:Client、Server 和 Messages,我们将按照以下步骤来完成这个任务。

  1. 创建 Client 项目
  2. 创建 Messages 项目
  3. 创建 Server 项目
  4. 发送订单
  5. 运行解决方案

完整的解决方案代码可以在这里下载。

创建 Client 项目

让我们开始创建 Client 项目,它将负责发送订单请求到一个 NServiceBus 终结点(Endpoint)。

以管理员权限运行 Visual Studio,添加一个名叫“Ordering.Client”的类库项目,并且将解决方案命名为“Ordering”。

我们现在需要引用 NServiceBus 的程序集,最快的方式是使用 NuGet 包管理控制台。

打开 NuGet 包管理控制台:

输入以下命令:

1
PM> Install-Package NServiceBus.Host

注:需要重新加载项目

包安装程序将引用 NServiceBus 程序集并在 Client 项目中创建几个模板文件。

例如,“EndpointConfig.cs” 被用来配置项目的终结点,并且自动应用了服务端配置。

为了将配置修改为客户端配置,我们需要打开“EndpointConfig.cs”文件并修改以下代码:

1
2
3
4
5
6
namespace Ordering.Client
{
    public class EndpointConfig : IConfigureThisEndpoint, AsA_Server
    {
    }
}

修改后的代码如下:

1
2
3
4
5
6
namespace Ordering.Client
{
    public class EndpointConfig : IConfigureThisEndpoint, AsA_Client
    {
    }
}

注:仅继承的基类由 AsA_Server 修改为 AsA_Client。

稍后我们将在 Client 项目中添加更多代码,现在让我们先把焦点放在如何处理订单请求上面。

创建 Messages 项目

首先添加一个名叫“Ordering.Messages”的类库项目。

该项目将包含消息定义,并且将由客户端和服务端共享,这样两边都将获得强类型的消息描述。

在该项目中安装“NServiceBusInterfaces”NuGet包,在包管理控制台,输入以下命令:

1
PM> Install-Package NServiceBus.Interfaces -ProjectName Ordering.Messages

添加一个“PlaceOrder.cs”文件,在其中添加以下代码:

1
2
3
4
5
6
7
8
9
10
namespace Ordering.Messages
{
 
    public class PlaceOrder : ICommand
    {
        public Guid Id { get; set; }
 
        public string Product { get; set; }
    }
}

创建 Server 项目

现在我们可以开始创建处理订单的服务端,首先添加一个名为“Ordering.Server”的类库项目。

为该项目安装“NServiceBusHost”NuGet包,在包管理控制台,输入以下命令:

1
PM> Install-Package NServiceBus.Host -ProjectName Ordering.Server

注:需要重新加载项目

添加对 Messages 项目的引用,以便服务端解释消息内容。

添加一个“PlaceOrderHandler.cs”文件,向其中写入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
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”文件,向其中写入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 程序。

简单吧。

如果你在控制台中看到警告,不用担心,这些警告只是 NServiceBus 告诉你它无法找到需要的队列,它将自动为你创建。

接下来学些什么

  • NServiceBus 入门之容错处理
  • NServiceBus 和 SOA 的架构原则

敬请期待。

 
 
分类: NServiceBus
标签: C#NServiceBus

NServiceBus 入门2的更多相关文章

  1. NServiceBus官方文档翻译(二)NServiceBus 入门

    在这篇教程中我们将学习如何创建一个非常简单的由客户端向服务端发送消息的订单系统.该系统包括三个项目:Client.Server 和 Messages,我们将按照以下步骤来完成这个任务. 创建 Clie ...

  2. NServiceBus入门:多个endpoint(Introduction to NServiceBus: Multiple endpoints)

    原文地址:https://docs.particular.net/tutorials/intro-to-nservicebus/3-multiple-endpoints/ 侵删. 目前为止,我们只是在 ...

  3. NServiceBus入门:发布事件(Introduction to NServiceBus: Publishing events)

    原文地址:https://docs.particular.net/tutorials/intro-to-nservicebus/4-publishing-events/ 侵删. 这个教程到目前为止,我 ...

  4. NServiceBus入门:启程(Introduction to NServiceBus: Getting started)

    原文地址:https://docs.particular.net/tutorials/intro-to-nservicebus/1-getting-started/ 侵删. 最好的学习NService ...

  5. NServiceBus入门:发送一个命令(Introduction to NServiceBus: Sending a command)

    原文地址:https://docs.particular.net/tutorials/intro-to-nservicebus/2-sending-a-command/ 侵删. 能够发送和接收mess ...

  6. NServiceBus 入门到精通(一)

    什么是NServiceBus?NServiceBus 是一个用于构建企业级 .NET系统的开源通讯框架.它在消息发布/订阅支持.工作流集成和高度可扩展性等方面表现优异,因此是很多分布式系统基础平台的理 ...

  7. SOA、ESB、NServiceBus、云计算 总结

    SOA SOA 是通过功能组件化.服务化,来实现系统集成.解决信息孤岛,这是其主要目标.而更进一步则是实现更快响应业务的变化.更快推出新的应用系统.与此同时,SOA 还实现了整合资源,资源复用. SO ...

  8. SOA、ESB、NServiceBus、云计算

    SOA.ESB.NServiceBus.云计算 总结 SOA SOA 是通过功能组件化.服务化,来实现系统集成.解决信息孤岛,这是其主要目标.而更进一步则是实现更快响应业务的变化.更快推出新的应用系统 ...

  9. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

随机推荐

  1. IT互联网行业中相关职能的缩写

    RD – Research & Develop 研发FE – Front End 前端QA – Quality Assurance 测试DBA – Database Administrator ...

  2. HDU1068/POJ1466_Girls and Boys(二分图/最大独立集=N-最大匹配)

    解题报告 http://blog.csdn.net/juncoder/article/details/38160591 题目传送门(POJ) 题目传送门(HDU) 题意: 求满足条件的最大集合:集合内 ...

  3. Cocos2d-x游戏开发Lua

    1.加入参考库 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lzZG9tNjA1NzY4Mjky/font/5a6L5L2T/fontsize/400 ...

  4. asp.net学习之GridView事件、GridViewRow对象

    原文:asp.net学习之GridView事件.GridViewRow对象 1. GridView控件的事件 GridView有很多事件,事件可以定制控件的外观或者行为.事件分为三类     1.1 ...

  5. 网络资源(2) - Maven视频

    2014_08_23 http://v.youku.com/v_show/id_XNDE2NzM0Nzk2.html Maven最佳实践,公司真实环境实践-私服最佳实践 2014_08_24 http ...

  6. Flex自定义组件开发之日周月日期选择日历控件

    原文:Flex自定义组件开发之日周月日期选择日历控件         使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的 ...

  7. Cocos发育Visual Studio下一个HttpClient开发环境设置

    Cocos2d-x 3.x相关类集成到网络通信libNetwork图书馆project于.这其中包括:HttpClient分类. 我们需要在Visual Studio溶液中加入libNetwork图书 ...

  8. 【高德地图API】如何获得行政区域?如何制作行政规划图?

    原文:[高德地图API]如何获得行政区域?如何制作行政规划图? 什么是行政规划图?如何获得每个行政区域的边界轮廓图?举例:重庆市 江北区.如图: 官方类参考:http://developer.amap ...

  9. DevExpress中获取RichTextEdit中RichEditControl的两种方式

    方式一: var rte = sender as RichTextEdit; control = rte.Controls[] as RichEditControl; 方式二: PropertyInf ...

  10. Codeforces 461B Appleman and Tree(木dp)

    题目链接:Codeforces 461B Appleman and Tree 题目大意:一棵树,以0节点为根节点,给定每一个节点的父亲节点,以及每一个点的颜色(0表示白色,1表示黑色),切断这棵树的k ...