DDD 为什么需要event bus?
简单的说就是 解耦 ,无论是本地聚合间的解耦,还是微服务间的解耦.
没有event bus的情况
假设在微服务架构中(例如有商城系统,通知系统,报表系统)
在商场系统中,用户下单了,有个需求是邮件通知用户下单成功,如何实现呢?
很简单,直接调用邮件系统服务的接口
第二天,产品又来个需求,用户每下一单,Leader要实时看到当日报表,如何实现呢?
直接调用报表系统服务的接口
第三天,产品又来个需... ...
这些需求本身与我的下单操作无关,但为了实现,必须每次为不相干且频繁变动的需求,去更新下单的业务..加上测试,上线...
问题就来了,这些需求都与我的下单业务无关,我为什么要关心,其他服务增增改改的需求呢?更可怕的是,为了应付与下单本身无关的需求,必须修改、测试、上线、背锅......
事件总线的好处
如果有通过事件的形式来实现,只需要在下单后,发布一个通知,如
eventBus.PubEvent("PlaceOrderSuccess",一堆数据)
其他任意服务,需要则订阅这个 PlaceOrderSuccess 事件即可.
此时下单成功后,新增需求则订阅该事件,砍掉需求则在自己的服务里取消该订阅,再也不会影响下单本身业务流程了.
同理微服务间如此,在DDD本地实体间也是如此(下单的领域事件不应该操心其他领域的后续操作),所以我们需要两个事件中心,一个本地使用,一个微服务间调用.
后面就一步一步的搭建简单的事件中心.
未完待续.....
网友评论