下载

在本教程中我们将创建一个非常简单的订购系统,将从客户机向服务器发送消息。订单系统包括三个项目:客户端、服务器和消息,来完成这个任务,我们将执行以下步骤:

  1. 创建客户端项目
  2. 创建项目的消息
  3. 创建服务器项目
  4. 发送订单
  5. 运行解决方案
创建客户端项目

让我们首先创建一个 Client项目将发送订单请求NServiceBus端点。

以管理员身份打开Visual Studio,创建一个新的类库的项目名称 Ordering.Client,名字的解决方案 Ordering.

我们现在需要添加引用NServiceBus总成和最快的和最容易的方式是使用NuGet包管理器控制台。

打开NuGet包管理器控制台: Tools > NuGet Package Manager > Package Manager Console.

在包管理器控制台键入以下命令:

PM> Install-Package NServiceBus.Host

当提示重新加载项目,点击重新加载。阅读更多关于Nuget处理依赖关系,并确保该项目是更新到最新版本的NServiceBus核心,阅读保持更新NuGet

包安装过程增加了NServiceBus程序集的引用和创建几个锅炉模板文件在客户端项目。

例如, EndpointConfig.cs用于配置项目的端点。

改变配置 Client,打开 EndpointConfig.cs文件只是为您创建和添加 AsA_Client如图所示:

    public class EndpointConfig : IConfigureThisEndpoint, AsA_Client

您将添加更多的代码以后客户的项目,但现在我们要集中精力处理我们的订单请求的区域。

创建项目的消息

首先让我们添加一个新的类库项目,称之为“Ordering.Messages”。

项目是容器的消息的消息定义。这个项目将会在客户端和服务器之间共享,双方同意类型化消息描述。

安装 NServiceBusNuGet包这个新项目:

包管理器控制台,类型:

PM> Install-Package NServiceBus -ProjectName Ordering.Messages

版本4。x,安装 NServiceBus.Interfaces包中。版本5. x, NServiceBus.Interfaces包已经被弃用。

添加一个命令和属性举行产品名称:

删除 Class1.cs并添加一个类和名称 PlaceOrder.cs(或者,如果您希望您可以重命名文件 PlaceOrder.cs).

实现在PlaceOrder命令 PlaceOrder.cs.

替换的内容 PlaceOrder.cs用下面的代码:

  • v5

    编辑

    namespace Ordering.Messages
    {
    using System;
    using NServiceBus; public class PlaceOrder : ICommand
    {
    public Guid Id { get; set; } public string Product { get; set; }
    }
    }
    创建服务器项目

    现在您已经准备好创建订单处理服务器。添加一个新的类库项目,命名为“Ordering.Server”。

    安装 NServiceBus.HostNuGet包这个新项目:

    包管理器控制台,类型:

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

    当提示重新加载项目,点击重新加载。阅读更多关于Nuget处理依赖关系,并确保该项目是更新到最新版本的NServiceBus核心,阅读保持更新NuGet

    服务器端来理解和解释消息的内容,添加��个引用 Messages项目前面创建:

    右键单击引用 Ordering.Server项目- >添加- > Ordering.Messages参考。

    重命名 Class1.cs PlaceOrderHandler.cs用以下代码替换的内容:

  • v5

    编辑

    namespace Ordering.Server
    {
    using System;
    using Messages;
    using NServiceBus; public class PlaceOrderHandler : IHandleMessages<PlaceOrder>
    {
    IBus bus; public PlaceOrderHandler(IBus bus)
    {
    this.bus = bus;
    } public void Handle(PlaceOrder message)
    {
    Console.WriteLine(@"Order for Product:{0} placed with id: {1}", message.Product, message.Id); // throw new Exception("Uh oh - something went wrong...."); Console.WriteLine(@"Publishing: OrderPlaceed for Order Id: {0}", message.Id); var orderPlaced = new OrderPlaced
    {
    OrderId = message.Id
    };
    bus.Publish(orderPlaced);
    }
    }
    }
    发送订单

    我们差不多了,剩下要做的就是回到 Client将一个引用添加到项目 Ordering.Messages项目和复制并粘贴以下代码Class1.cs(如果你想要你可以重命名的文件 SendOrder.cs)文件:

  • v5

    编辑

    namespace Ordering.Client
    {
    using System;
    using Messages;
    using NServiceBus; public class SendOrder : IWantToRunWhenBusStartsAndStops
    {
    IBus bus; public SendOrder(IBus bus)
    {
    this.bus = bus;
    } public void Start()
    {
    Console.WriteLine("Press 'Enter' to send a message.To exit, Ctrl + C"); while (Console.ReadLine() != null)
    {
    var id = Guid.NewGuid(); var placeOrder = new PlaceOrder
    {
    Product = "New shoes",
    Id = id
    };
    bus.Send("Ordering.Server", placeOrder); Console.WriteLine("Send a new PlaceOrder message with id: {0}", id.ToString("N"));
    }
    } public void Stop()
    {
    }
    }
    }
    选择一个持久性存储

    在这一点上,如果你尝试编译解决方案,应该有两个错误 EndpointConfig.cs为Ordering.Client` and the秩序。服务器的项目。您将看到编译器抱怨这行代码在两个项目:

    configuration.UsePersistence<PLEASE_SELECT_ONE>();

    如果您使用的是版本的NServiceBus前5。x,你不会看到这个错误,并跳到下一节。

    从NServiceBus版本5开始,它是强制性的持久性。最快的方法解决���个为了这个演示来取代 PLEASE_SELECT_ONEInMemoryPersistence如下所示:

    configuration.UsePersistence<InMemoryPersistence>();

    NServiceBus需要持久性存储处理订阅,传奇,超时,重复数据删除,等等。InMemoryPersistence很好对于这个简单的示例,但它不是用于生产使用。请阅读坚持NServiceBus为更多的信息关于如何选择一个持久性存储和安装正确的依赖关系。

    运行解决方案

    你完成了编码的例子和现在运行的解决方案。

    看到完整的系统,运行客户端和服务器的项目:

    运行 Client Server项目在一起所以你可以看到这一切工作,右键单击 Ordering解决方案并选择“设置启动项目…”

    在屏幕上选择并设置多个启动项目 Ordering.Client Ordering.Server行动是“开始”。

    最后按“F5”运行的解决方案。

    两个控制台应用程序窗口应该启动

    回车(在客户端控制台集中),您应该看到的订单产品:新鞋放置在其中之一。

  • NServiceBus-进阶的更多相关文章

    1. nodejs进阶(6)—连接MySQL数据库

      1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

    2. nodejs进阶(4)—读取图片到页面

      我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

    3. JavaScript进阶之路(一)初学者的开始

      一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...

    4. nodejs进阶(3)—路由处理

      1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

    5. nodejs进阶(5)—接收请求参数

      1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...

    6. nodejs进阶(1)—输出hello world

      下面将带领大家一步步学习nodejs,知道怎么使用nodejs搭建服务器,响应get/post请求,连接数据库等. 搭建服务器页面输出hello world var  http  =  require ...

    7. [C#] 进阶 - LINQ 标准查询操作概述

      LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...

    8. Java 进阶 hello world! - 中级程序员之路

      Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...

    9. C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

      前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解  ...

    10. 【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理

      本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/3FTPFvZRqyAQnU047kmWJQ 1.4进阶:内存原理 在 ...

    随机推荐

    1. js判断页面放大缩小

      项目中,经常会碰到页面被放大或者缩小,导致页面显示错误,js可以判断页面放大缩小. // 若返回100则为默认无缩放,如果大于100则是放大,否则缩小 function detectZoom (){ ...

    2. Git server安装和配置

      yum install git yum install git-dameon toiseGit

    3. Amazium源码分析:(1)基本介绍

      前言 Amazium是一个网格系统的框架,分析该源码的目的是了解网格系统的实现. 网格系统 定义:设计美观页面布局的方式,上图能够很直观的了解什么是网格系统. 基本概念 column: 列. gutt ...

    4. 【同行说技术】swift最全学习资料汇集(一)

      Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序.2015年12月4日,苹果公司宣 ...

    5. $^,$@,$?,$<,$(@D),$(@F) of makefile

      makefile下$(wildcard $^),$^,$@,$?,$<,$(@D),$(@F)代表的不同含义 $(filter-out $(PHONY) $(wildcard $^),$^)常用 ...

    6. unity3d 破解安装

      1.下载破解程序,执行生成unity_v4.x.ulf文件 2.断网 3.执行unity客户端,load该lisence文件即可 注意:安装unity客户端完成后,未破解,切记别打开unity客户端 

    7. cocoStudio UI编辑器 学习总结

      一.控件 控件基类 UIWidget:所有UI控件的基类 addChild:添加UIWidget类型的节点 addRenderer:添加CCNode类型的节点 所有UIWidget,都可以设置成触摸s ...

    8. I.MX6 ov5640 camera

      /************************************************************************ * I.MX6 ov5640 camera * 说明 ...

    9. Java 图片提取RGB数组 RGBOfCharMaps (整理)

      package demo; /** * Java 图片提取RGB数组 RGBOfCharMaps (整理) * 声明: * 和ImageCombining配合使用的工具,这里是提取图片的R.G.B生成 ...

    10. 常见SQLException异常

      ORA-00904:  invalid column name 无效列名 ORA-00942:  table or view does not exist 表或者视图不存在 ORA-01400:  c ...