假设场景
假设有这么一种业务场景,业务为【用户注册】处理完后,同时触发【邮件通知】业务、【赠送积分】业务的执行,在不利用MQ的情况下,会有什么样的解决思路?可能的解决思路有如下
- 业务【用户注册】处理后,开启线程处理【邮件通知】、【赠送积分】的业务
- 使用 disruptor 进行处理
- 生产消费者模式
- 观察者模式 … 解决的思路有很多。
本文就介绍的是基于 disruptor 实现的,类似 Spring事件驱动模型 ApplicationEvent,这里称为 领域事件 。事件驱动模式与观察者模式在某些方面极为相似;当一个主体发生改变时,所有依属体都得到通知。不过,观察者模式与单个事件源关联,而事件驱动模式则可以与多个事件源关联。下面先看一下对于 领域事件 的介绍。
简介 Event Source 领域事件
- 领域驱动设计,基于 LMAX 架构。
- 单一职责原则 ,可以给系统的 可扩展、高伸缩、低耦合 达到极致。
- 异步高并发 、线程安全的、使用disruptor 环形数组来 消费业务。可并发执行,性能超高,执行1000W次事件只需要1.1秒左右(这个得看你的电脑配置)。
- 使用事件消费的方式编写代码,使得业务在复杂也不会使得代码混乱, 维护代码成本更低 。
- 可灵活的定制业务线程模型
- 插件形式提供事件领域