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 并不能保证当前通信的另一端处于可用状态。

    NServiceBus是dotnet世界里面最流行的开源企业服务总线.  它具有以下特点: 1.强大,轻量级.     2.可插拨,简单易用.     3.支持企业级开发.

    在internet中的应用

    image

    Publish / Subscribe (发布者/订阅者)

    ²这种方式解决了发布消息对象知道消息发送给谁.(谁订阅了就给谁发)

    Subscriptions (订阅者)

    image

    Publish(发布者)

    image

    NserviceBus in Distributor(在分布式系统的应用)

    One publish(一个发布者):

    image

    Two publish(两个发布者的时候):

    image

    Point to Point(点对点通信)

    image

    Point to Point Configuration(需要配置)

    1
    2
    3
    4
    5
    6
    Client
     
    class EndPointConfig : IConfigureThisEndpoint, AsA_Client { }
     
    <UnicastBusConfig>      <MessageEndpointMappings>       <add Messages="MyMessages“ Endpoint="MyServerInputQueue" />   </MessageEndpointMappings>
    </UnicastBusConfig>
    1
    2
    3
    4
    5
    Server
     
    class EndPointConfig : IConfigureThisEndpoint, AsA_Server { }
     
    <MsmqTransportConfig InputQueue="MyServerInputQueue" />

    Request & Response(请求\回复)

    image

    Publish & Subscribe(发布者\订阅者)

    image

    1
    2
    3
    4
    5
    Subscriber
     
    class EndPointConfig : IConfigureThisEndpoint, AsA_Server { }
     
    <MsmqTransportConfig InputQueue=Subscriber1InputQueue" />   <UnicastBusConfig>      <MessageEndpointMappings>       <add Messages="MyMessages" Endpoint=" MyPublisherInputQueue" />     </MessageEndpointMappings>   </UnicastBusConfig>
    1
    2
    3
    4
    5
    Publisher
     
    class EndPointConfig : IConfigureThisEndpoint, AsA_Publisher { }
     
    <MsmqTransportConfig InputQueue="MyPublisherInputQueue />

    Saga(Workflow)

    image

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Server
     
    class EndPointConfig : IConfigureThisEndpoint, AsA_Server { }
     
    <MsmqTransportConfig InputQueue=MySagaInputQueue" />
      <UnicastBusConfig>   <MessageEndpointMappings>     <add Messages="MyMessages" Endpoint="MyDestinationInputQueue" />
          <add Messages=“NServiceBus.Saga.TimeoutMessage” Endpoint=“timeoutmanager” >   </MessageEndpointMappings>
      </UnicastBusConfig>
     
    <NHibernateSagaPersisterConfig>
      <NHibernateProperties>
          <add Key="connection.provider“ Value="NHibernate.Connection.DriverConnectionProvider"/>
          <add Key="connection.driver_class" Value="NHibernate.Driver.SqlClientDriver"/>
          <add Key="connection.connection_string" Value="Server=localhost;initial    catalog=NServiceBus;Integrated Security=SSPI"/>
          <add Key="dialect" Value="NHibernate.Dialect.MsSql2000Dialect"/>
        </NHibernateProperties>
      </NHibernateSagaPersisterConfig>

    Distributor(分布式系统)

    image

    1
    2
    3
    <appSettings>   <add key="NumberOfWorkerThreads" value="1"/>   <!-- queue that the distributor process reads and feeds to workers -->   <add key="DataInputQueue" value="nservicebus_distributor_data_bus"/>
      <!--queue that manages work distribution -->  <add key="ControlInputQueue“  value="nservicebus_distributor_control_bus"/>   <!-- errors -->   <add key="ErrorQueue" value="nservicebus_error"/>   <!-- queue that maintains the state(availability) of the workers -->   <add key="StorageQueue" value="nservicebus_distributor_storage"/>      <!-- relevant for a Serialization of "interfaces" or "xml" -->   <add key="NameSpace" value="http://www.MySite.com"/>         <add key="Serialization" value="xml"/>   <!-- can be either "xml", or "binary" -->
    </appSettings>
  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2302667.html
Copyright © 2011-2022 走看看