看eShopOnContainers学一个EventBus

  • 时间:
  • 浏览:1
  • 来源:大发5分快乐8APP下载_大发5分快乐8APP官方

首先构造函数中声明其他人要使用的东西:

思路是原来的:

其他人分别存储了事件列表和事件正确处理器信息词典

查询事件的名字是manager做的,订阅的事先是先向mq加进订阅,事先又加到manager中,manager管理着订阅的基本信息。

注册DI,你能否 注册下面哪此服务:

在eShop含有一有四个 EventBus的实现:

在eShop中这样一有四个 实现这样多这样多InMemoryEventBusSubscriptionsManager

接下来这样多这样多最重要的Publish法律方法,实现Publish有你这个法律方法:

这里要注意的这样多这样多IServiceProvider provider这是 DI容器,当其他人在切实正确处理事件的事先其他人选则从DI获取正确处理器的实例,而时需反射创建,这要做的好占据 于,正确处理器都时需依赖于其它东西,之后都时需是单例的

其他人要做哪此呢?IEventBusSubscriptionsManager 将会有了InMemory的实现了,其他人都时需直接拿来用,这样多这样多其他人只时需买车人实现有一有四个 EventBus就好了

其他类含有一有四个 重要的字段

嗯,乍一看看是很糙眼晕的,仔细看它的核心功能这样一有四个 :

eShop中的EventBus这样多这样多基于其他模式的发布/订阅

发布订阅模式核心概念有一有四个 :发布者、订阅者、调度中心,哪此概念在消息队列中这样多这样多生产者、消费者、MQ实例

另外有一有四个 重要功能是获取事件的正确处理器信息,在rabbit mq的实现中,ProcessEvent法律方法中用manager获取了事件的正确处理器,再用依赖注入获得正确处理器的实例,反射调用Handle法律方法正确处理事件信息:

OK,其他人的InMemoryEventBus就写好了!

这对应着发布订阅模式的基本概念,不过对于事件总线的接口加进了其他约束:

这有你在身边将会会有原来间题:

订阅和收回 订阅很简单,将会其他人是InMemory的这样多这样多只调用了manager的法律方法。

最近在看微软eShopOnContainers 项目,看到事件总线真是不错,和其他人分享一下

先贴出最终代码:

Ok,看到这里先不不管Dynamic相关的法律方法,之后记住其他有一有四个 关键点:

发布订阅模式都时需让应用守护进程组件之间解耦,这是其他人使用其他模式最重要的理由之一,将会你完整性告诉我其他东西,建议你先通过搜索引擎了解一下其他模式,网上的资料这样多这样多这里就不再赘述了。

接下来这样多这样多实现有一有四个

先来看一看,所有EventBus的接口IEventBus

写有一有四个 Api接口或是哪此,调用IEventBus的Publish法律方法,new 有一有四个 新的AddUserEvent作为参数传进去。

SubscriptionInfo中这样一有四个 信息,这是时需一有四个 Dynamic类型的Event以及其他Event所对应的正确处理器的类型。

其他接口看起来稍显复杂些,其他人来复杂下看看:

为了简单起见,其他人先写个简单易懂的同步的

另外,看下 IntegrationEvent有哪此

最终,这有一有四个 法律方法这样多这样多其他人要关注的,加进订阅、移除订阅、获取指定事件的订阅信息。

OK!到这里有一有四个 切实可用的InMemoryEventBus就都时需使用了。

IEventBusSubscriptionsManagerIEventBus使用,在RabbitMq和ServiceBus的实现中,都使用Manager去存储事件的信息,类事下面的代码:

要实践其他InMemoryEventBus,这样 还时需有一有四个 IntegrationEvent的子类,和有一有四个 IIntegrationEventHandler<T>的实现类,哪此时需难,类事其他人做有一有四个 加进用户的事件,A在加进用户后,发起有一有四个 事件并将新用户的名字作为事件数据,B去订阅事件,并在买车人的正确处理器中正确处理名字信息。