zoukankan      html  css  js  c++  java
  • NServiceBus

         NServiceBus 是一个用于构建企业级 .NET系统的开源通讯框架。它在消息发布/订阅支持、工作流集成和高度可扩展性等方面表现优异,因此是很多分布式系统基础平台的理想选择。,它能够帮助开发人员在搭建企业.NET系统时避免很多典型的常见问题。同时,该框架也提供了一些可伸缩的关键特征,比如对发布/订阅的支持、集成的长时间工作流及深入的扩展能力等。据作者说,其本意是为构建分布式应用软件创建一个理想的基础设施。

        NServiceBus的核心并不依赖于MSMQ。NServiceBus可扩展性允许我们插入自行编写的通信传送器,、订阅存储器和工作流的实现。我已经基于MSMQ实现了一个传送器,还有一个则借助了WCF的NetTCP。开发人员既可以使用这些现有组件,也可以根据需要进行自定义。我们知道当前的许多SOA产品都与HTTP紧密耦合,因此NServiceBus的这种实现方式也将是个另辟蹊径的设计。 
    之所以选择使用MSMQ,是因为它是微软公司的两大主流的通讯技术之一(另一个是SQL Server Service Broker)。MSMQ允许双方在离线的状态下进行通信,且它提供了一整套易于使用的API,并已经集成到了.NET框架中,这一点要比Service Broker好得多。我个人认为支持离线通信是任何SOA基础框架都必须考虑的关键部分——因为Tenet of Service Autonomy 并不能保证当前通信的另一端处于可用状态。
     

    学习创建一个简单的由客户端向服务端发送消息的订单系统。

    该系统包括三个项目:Client、Server 和 Messages,我们将按照以下步骤来完成这个任务:
    1. 创建 Client 项目
    2. 创建 Messages 项目
    3. 创建 Server 项目
    4. 发送订单
    5. 运行解决方案

    创建项目之前先记得安装MSMQ消息队列服务,Windows自带这个功能了,只需要安装一下。

    创建 Client 项目

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

    先创建一个解决方案命名为“Ordering”,然后添加一个名叫“Ordering.Client”的类库项目。

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

    打开 NuGet 包管理控制台:

    输入以下命令:

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

    注:需要重新加载项目

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

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

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

    namespace Ordering.Client
    {
        using NServiceBus;
        publicclassEndpointConfig : IConfigureThisEndpoint, AsA_Client
        {
            publicvoid Customize(BusConfiguration configuration)
            {
                configuration.UsePersistence<InMemoryPersistence>();
                configuration.UseTransport<MsmqTransport>();
            }
        }
    }
     
    注:仅继承的基类由 AsA_Server 修改为 AsA_Client。

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

    创建 Messages 项目

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

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

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

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

    可以将自动添加的配置文件app.config和EndpointConfig.cs两个文件删除。

    
    

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

    namespace Ordering.Messages
    {
        publicclassPlaceOrder : ICommand
        {
            publicGuid Id { get; set; }
            publicstring Product { get; set; }
        }
    }

    创建 Server 项目

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

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

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

    注:需要重新加载项目

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

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

     
    namespace Ordering.Server
    {
        publicclassPlaceOrderHandler : IHandleMessages<PlaceOrder>
        {
            publicIBus Bus { get; set; }
            publicvoid Handle(PlaceOrder message)
            {
                Console.WriteLine(@"Order for Product:{0} placed with id: {1}", message.Product, message.Id);
            }
        }
    }

    发送订单

    我们差不多快做好了,现在唯一剩下的就是回到 Client 项目中,添加对 Messages 项目的引用,并添加一个“SendOrder.cs”文件,向其中写入以下代码:

    namespace Ordering.Client
    {
        publicclassSendOrder : IWantToRunWhenBusStartsAndStops
        {
            publicIBus Bus { get; set; }
            publicvoid 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", newPlaceOrder() { Id = id, Product ="New shoes" });
                    Console.WriteLine("=============================================");
                    Console.WriteLine("Send a new PlaceOrder message with id: {0}",id.ToString("N"));
                }
            }
            publicvoid Stop()
            {
               
            }
        }
    }

    注:以上代码基于 4.x 版本,若使用 3.x 版本需要使用 “IWantToRunAtStartup”接口。 

    运行解决方案

    已经完成编码了,现在是时候运行解决方案了。

    在解决方案中设置启动项目,将 Client 和 Server 项目设置为同时运行。

    最后点击 F5 按钮运行解决方案,即可看到整个系统。

    将会有两个控制台应用程序启动,在客户端控制台中按下回车,将在服务端窗口中看到“Order for Product: New shoes placed”。

  • 相关阅读:
    URLEncode解决url中有特殊字符的问题
    监控系统概览
    SpringBoot 上传文件夹
    关于postgresql报 ERROR: XXX does not exist
    postgresql学习
    git学习
    学习博客
    面试准备
    jvm
    线程池面试题
  • 原文地址:https://www.cnblogs.com/landywzx/p/5049009.html
Copyright © 2011-2022 走看看