发布/订阅配置 的部分入口声明消息= "消息"意味着组装”消息。dll包含消息模式”。特定类型可以配置使用限定名称: namespace.type, assembly. 声明部分端点= " messagebus "告诉订阅者的总线对象,出版商接受订阅请求队列。队列名称“messagebus”简称“队列命名messagebus在本地机器上”。来表示一个队列在远程机器上,使用类似于电子邮件的格式:MessageBus@RemoteServer。 点击这里更多配置选项相关的消息映射到端点。 然而,每个过程的输入队列并需要在同一台机器上的进程。 在这一点上,公共汽车用户过程中知道的消息模式和端点出版商愿意接受订阅请求。总线对象然后会看到应用程序代码在用户希望处理这些信息,并发送一个订阅请求的端点。 订阅的意图 应用程序代码在用户处��信息发布者发布的实现(IHandleMessagesNServiceBus界面,如图所示: 处理消息 这个接口需要单一的处理方法接受一个参数相同的类型中声明的类继承。忽视现在的方法,因为它的身体没有影响发布/订阅是如何工作的。 自从消息处理(EventMessage)属于以前描述的消息组件(Messages.dll)和订阅者的总线知道这些消息属于出版商从app.config(上图),唯一的方法,处理可以处理消息属于别人对他们来说是一个订户,总线自动订阅。这是它是如何工作的。 消息传递机制 订阅 订户订阅的出版商的总线发送消息的队列的配置 部分如上所述。在消息中,总线包括消息的类型和用户的输入队列。当公共汽车在出版商端收到这个消息,它存储的信息。 重要的是要明白,每个出版商负责自己的信息。不一定有逻辑上中央代理商店所有的东西,尽管NServiceBus允许配置所有出版商信息存储在一个中央位置,如数据库。 用户也可以是一个出版商。它很简单,一个给定的过程是一个出版商。 如何成为一个出版商 表明一个给定的过程是一个出版商,引用NServiceBus总成和写一个实现类 IConfigureThisEndpoint和AsAPublisher如下所示。 上面的三个NServiceBus程序集引用、参考log4net,这是开源库,用于日志记录。在NServiceBus日志配置比标准log4net模型略有不同。 设置一个出版商 忽略ISpecifyMessageHandlerOrdering现在的接口。 订阅存储 NServiceBus在内部设置存储订阅信息被放置的地方。默认情况下,NServiceBus将该信息存储在RavenDB但也有内置的存储选项的MSMQ和关系数据库和在内存中。你不需要指定这个代码或配置。看到NServiceBus概要文件是如何工作的获得更多信息。 默认情况下,用户存储在一只乌鸦具有相同名称的数据库作为您的端点。订阅为每个消息类型存储在“订阅”作为一个文档集合。 配置MSMQ订阅存储: public class ConfigureMsmqSubscriptionStorage : INeedInitialization { public void Init() { Configure.Instance.MsmqSubscriptionStorage(); } } 你不需要任何配置更改为此,NServiceBus自动使用一个队列称为“{您的端点名称} .Subscriptions”。但是如果你想指定队列用来保存订阅自己,添加以下配置节和后续的配置项: <?xml version="1.0" encoding="utf-8" ?> 多台机器共享相同的订阅存储,不使用上述MSMQ选项;相反,使用任何描述的数据库支持的商店在这个页面。 配置一个关系数据库作为您的订阅存储,只是引用 NServiceBus.NHibernate.dll并添加: public class ConfigureNHibernateSubscriptionStorage : INeedInitialization { public void Init() { //Usage for V3 Configure.Instance.DBSubcriptionStorage(); //Usage for V4 Configure.Instance.UseNHibernateSubscriptionPersister(); } } 这个选项需要出现在你的配置,以下为V3: <?xml version="1.0" encoding="utf-8" ?> V4和: <?xml version="1.0" encoding="utf-8"?> 如果你不想在你的配置所有这些信息,你可以指定代码的过载 DBSubscriptionStorage的方法,该方法接受一个字典NHibernate属性上面。 额外的 autoUpdateSchema'参数,如果设置为“真正的”,告诉NServiceBus配置数据库中创建必要的表来存储订阅信息。这个表被称为“订阅”,有两列,“SubscriberEndpoint”和“MessageType”;他们的varchar和。 阅读更多信息NHibernate配置,特别是表3.1和3.5节的可选的配置选项。表3.3可以帮助您配置像Oracle这样的其他数据库和MySQL。 如何发布? 发布一条消息,您需要一个引用到总线对象在您的代码中。在pub / sub样本,这个代码的 ServerEndpoint类在服务器项目,如图所示: public class HandlerThatPublishedEvent : IHandleMessages { public IBus Bus { get; set; } public void Handle(MyMessage message) { Bus.Publish(e => { e.SomeProperty = "xyz"; }); } } “公共汽车”属性将自动由基础设施。这就是所谓的“依赖注入”。所有开发完成了NServiceBus利用这些模式。技术作为NServiceBus是可插拔的依赖注入容器,有五个选项,Autofac是默认的。 在“运行”方法中,事件消息的创建。这可以简单实例化相关的类或使用总线对象实例化信息定义为接口。阅读更多信息是否使用接口或类来表示信息 . 一旦创建了事件消息对象,调用 Bus.Publish(eventMessage);讲述了总线对象有给定的消息发送到所有类型的消息的用户表示有兴趣。演练中我们看到,如果一个用户不可用,他们的消息并不失去他们存储,直到用户回来在线。看到的存储和转发消息的部分架构原则NServiceBus的更多信息。 安全与授权 你可能不想让任何端点订阅一个给定的出版商或事件。NServiceBus提供了一种方法让你介入订阅过程和决定是否应该允许给定客户端订阅一个给定的消息。你可以看到的 SubscriptionAuthorizer类在服务器项目。 类的实现 IAuthorizeSubscriptions接口,它需要 AuthorizeSubscribe和 AuthorizeUnsubscribe方法。实现样品的不做,返回true。在实际的项目中,你可能会获得一些访问控制系统,活动目录,或者只是一个数据库来决定是否应该允许行动。 版本管理订阅 在NServiceBus V3.0和开始订阅类型相同的主要版本是兼容的。这意味着一个订阅MyEvent 1.1.0将被认为是有效MyEvent 1. x。Y。 V2。X需要一个完美的匹配。这将使它更容易升级你的出版商而不影响用户。 最佳实践 当你告诉NServiceBus消息事件,该框架可以帮助您执行最好的消息传递实践仅允许您总线。发布|订阅|取消订阅事件。其他电话导致异常。更多关于最佳实践 . 正如您可以看到的,有很多底层。NServiceBus可以让您完全控制消息交换的每一部分而抽象底层技术。尝试修改样品,添加你自己的消息处理程序,调试通过各个部分得到更好的感觉。
转载于:https://www.cnblogs.com/powerxu/p/4294352.html