NServiceBus-进阶

下载

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

  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”运行的解决方案。

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

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

  • 时间: 2024-08-11 03:26:26

    NServiceBus-进阶的相关文章

    Azure进阶攻略丨Azure网络通不通,PsPing&amp;PaPing告诉你答案

    很多时候,为了解决一些问题,要查各种文档,很麻烦你造吗!做「伸手党」又容易被鄙视,这时候就需要用到[Azure 进阶攻略]啦!特此,我们推出关于 Azure 常用操作指南的系列文章,每篇涉及一个 Azure 使用过程中的问题,简明扼要直击重点,纯干货内容帮你快速搞定 Azure 使用难题和障碍,只需一两分钟阅读,你就可以继续愉快地翱翔云端~ 在技术人员和网络工程师的世界中,有一些众所周知的排错方式,例如: -你先 Ping 一下某某计算机,看它开着没, -我可以 Ping 通路由器,但 Ping

    Java进阶书籍推荐

    学习Java,书籍是必不可少的学习工具之一,尤其是对于自学者而言.废话不多说,下边就给广大程序猿们推荐一些Java进阶的好书. 第一部分:Java语言篇 1.<Java编程规范> 适合对象:初级.中级 介绍:这本书的作者是被誉为Java之父的James Gosling,入门者推荐阅读,对基础的讲解很不错. 2.<Java编程思想> 适合对象:初级.中级 介绍:豆瓣给出了9.1的评分,全球程序员广泛赞誉.有人说这本书不适合初学者,不过小编认为作者并没有对读者已有的知识经验有过多要求,

    进阶之初探nodeJS

    一.前言 在"初探nodeJS"随笔中,我们对于node有了一个大致地了解,并在最后也通过一个示例,了解了如何快速地开启一个简单的服务器. 今儿,再次看了该篇随笔,发现该随笔理论知识稍多,适合初级入门node,固萌生一个想法--想在该篇随笔中,通过一步步编写一个稍大一点的node示例,让我们在整体上更加全面地了解node. so,该篇随笔是建立在"初探nodeJS"之上的,固取名为"进阶之初探nodeJS". 好了,侃了这多,那么我们即将实现一个

    机器学习进阶笔记之一 | TensorFlow安装与入门

    原文链接:https://zhuanlan.zhihu.com/p/22410917 TensorFlow 是 Google 基于 DistBelief 进行研发的第二代人工智能学习系统,被广泛用于语音识别或图像识别等多项机器深度学习领域.其命名来源于本身的运行原理.Tensor(张量)意味着 N 维数组,Flow(流)意味着基于数据流图的计算,TensorFlow 代表着张量从图象的一端流动到另一端计算过程,是将复杂的数据结构传输至人工智能神经网中进行分析和处理的过程. -- 由 UCloud

    Python之路【第十七篇】:Django【进阶篇 】

    Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

    bash脚本编程之case语句及脚本选项进阶

    case语句及脚本选项进阶详解     面向过程程序设计语言中的控制流(即程序当中的语句)默认是顺序执行的. 程序设计语言的控制结构一共有三类: 1,顺序结构 2,选择结构 (1)if语句 ->单分支的if语句 格式:if condition1;then expression ... fi ->双分支的if语句 格式:if condition1;then expression ... else expression ... fi ->多分支的if语句 格式:if condition1;t

    Java进阶(三十四)Integer与int的种种比较你知道多少?

    Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱.所以我对它们进行了总结,希望对大家有帮助. 首先看代码: package

    grep进阶与sed行编辑器

    grep进阶与sed行编辑器 上一篇(http://nearlv.blog.51cto.com/2432295/1729198)我们介绍了grep的一些基本的使用方法,其它grep还是一些比较高级的用法,让我们一起来看看. 先来看一下下面例子的运行结果: 相同的命令输出的结果有点不一样,对,这里就是利用"alias"去设置命令的别名,语法格式为"alias="command""即可,可能通过直接在命令行输入"alias"查看当

    我的Android进阶之旅------&gt;Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题

    今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.好吧,又是我来维护. 好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章 我的Android进阶之旅------>Android[设置]-[语言和输入法]-[语言]列表中找到相应语言所对应的列表项 地址:http://blog.csdn.net/ouyang_peng/article/details/50209789 ================================

    8. 蛤蟆的数据结构进阶八哈希表相关概念

    8. 蛤蟆的数据结构进阶八哈希表相关概念 本篇名言:"作家当然必须挣钱才能生活,写作,但是他决不应该为了挣钱而生活,写作.--马克思" 前些笔记我们学习了二叉树相关.现在我们来看下哈希表.这篇先来看下哈希表的相关概念 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47347273 1.  哈希表的概念 哈希表(HashTable)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构.它通过把关键