发布/订阅配置

发布/订阅配置 的部分入口声明消息= "消息"意味着组装”消息。dll包含消息模式”。特定类型能够配置使用限定名称: namespace.type, assembly. 声明部分端点= " messagebus "告诉订阅者的总线对象,出版商接受订阅请求队列。队列名称“messagebus”简称“队列命名messagebus在本地机器上”。来表示一个队列在远程机器上,使用相似于电子邮件的格式:MessageBus@RemoteServer。 点击这里更多配置选项相关的消息映射到端点。 然而,每一个过程的输入队列并须要在同一台机器上的进程。 在这一点上,公共汽车用户过程当中知道的消息模式和端点出版商愿意接受订阅请求。总线对象而后会看到应用程序代码在用户但愿处理这些信息,并发送一个订阅请求的端点。 订阅的意图 应用程序代码在用户处��信息发布者发布的实现(IHandleMessages NServiceBus界面,如图所示: 处理消息 这个接口须要单一的处理方法接受一个参数相同的类型中声明的类继承。忽视如今的方法,由于它的身体没有影响发布/订阅是如何工做的。 自从消息处理(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”。可是若是你想指定队列用来保存订阅本身,添加如下配置节和后续的配置项:
多台机器共享相同的订阅存储,不使用上述MSMQ选项;相反,使用任何描述的数据库支持的商店在这个页面。 配置一个关系数据库做为您的订阅存储,只是引用 NServiceBus.NHibernate.dll并添加: public class ConfigureNHibernateSubscriptionStorage : INeedInitialization { public void Init() { //Usage for V3 Configure.Instance.DBSubcriptionStorage(); //Usage for V4 Configure.Instance.UseNHibernateSubscriptionPersister(); } } 这个选项须要出如今你的配置,如下为V3:
V4和: 若是你不想在你的配置全部这些信息,你能够指定代码的过载 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可让您彻底控制消息交换的每一部分而抽象底层技术。尝试修改样品,添加你本身的消息处理程序,调试经过各个部分获得更好的感受。
相关文章
相关标签/搜索