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. 开展.net mvc3遇到怪事+解

    发展到今天.net mvc3遇到怪事. 使用Firefox浏览器.打开index页,求index该控制器是很多次,代码查询数据库的多个运行.server减速. 而且没有刷新页面,随着时间的推移有十二请 ...

  2. C#动态调用WCF接口

    C#动态调用WCF接口 写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触到现在断断续续,真正使用的项目少之又少,更谈不上深入WCF内部实现机制和原理去研究,最近自己做一个项 ...

  3. 使用Django清理数据库中的数据

    数据库,数据清洗 问题叙述性说明:在系统我用在,因为历史和由于各种原因,原因记录的数据内的数据库表,有一个问题,有反复和不完整的数据 解:首先.由于数据量还是挺大的,工的清理肯定不行, 然后,我就想写 ...

  4. GridView网格线都设置

    如今,做网上商店的商品陈列,我想用网络格布局,但总认为空好看.所以我想给它一个净加格线.但是,我遇到了一个问题,网络格布局其实很easy,是集GridView布局和背景颜色adapter布局设置背景颜 ...

  5. Android 最热的高速发展框架XUtils

    近期搜了一些框架供刚開始学习的人学习,比較了一下XUtils是眼下git上比較活跃 功能比較完好的一个框架,是基于afinal开发的,比afinal稳定性提高了不少.以下是介绍: 鉴于大家的热情,我又 ...

  6. Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Multiple representations of the same entity解决方法

    1.错误信息 Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUs ...

  7. 高速建成Android开发环境ADT-Bundle和Hello World

    ----下载JDK(Java Dev Kit) 官方下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html 兴许步骤 ...

  8. oracle 11g 自己主动调整

    --:自己主动调教计划 begin   dbms_workload_repository.create_snapshot(); end; select /*+ result_cache */ coun ...

  9. java Json字符串转List<Map>类型

    //相关包 import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonPa ...

  10. 基于STM32旋转编码器

    ..\..\SYSTEM\usart\usart.c(1): error:  #5: cannot open source input file "sys.h": No such ...