zoukankan      html  css  js  c++  java
  • 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”运行的解决方案。

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

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

        查看全文
      • 相关阅读:
        一步一步学习开发BPM工作流系统(三)开发WinForm的应用平台1
        支持多数据库本地和远程调用的数据访问层架构
        HF Web表单开发技术文档
        CDZSC_2015寒假新人(2) 数学 C
        CDZSC_2015寒假新人(2)——数学 A
        ZSC 1306: 沼跃鱼早已看穿了一切 题解
        解决”java.lang.UnsatisfiedLinkError: Native Library .dll already loaded in another classloader”的问题
        有目标就要坚持
        (转)新兴XML处理方法VTDXML介绍
        (转)Java远程通讯可选技术及原理
      • 原文地址:https://www.cnblogs.com/powerxu/p/4294259.html
      • Copyright © 2011-2022 走看看