事件与监听
事件与监听是niucloud进行代码解耦的基础,是niucloud区别与其他系统一个很重要的技术点。通过事件与监听可以将系统的业务进行分离,比如支付,存储,订单业务等。下面针对具体的几个案例说明一下事件与监听的执行过程。后期可以与微服务设计中消息相结合。
- 事件命名event,监听命名listener,包括系统定义的事件和插件定义的事件
具体文件夹如下
- event的作用是事件定义,listener作用是事件的监听,比如支付功能,会员功能等的定义与监听,下面针对会员注册事件来说明
首先定义会员注册事件,里面的成员变量是事件需要获取的参数,供监听使用,调用事件需要配置相关参数。
其次需要针对具体的行为注册对应事件,比如会员注册方法中调用事件,会员注册成功之后调用
再次,对应事件监听,比如会员注册后发放成长值,初始化积分,以及奖品等,这里针对core下面会员注册发放积分和成长值
其中的设置来源于后台
上面针对事件简单了解,事件一般是异步执行的,但是还有一种实际是扩展,需要获取返回的数据。比如第三方注册,系统定义了基础的注册方式事件,实际的注册方式可能是微信,支付宝,小程序等。还有支付,系统定义了支付方式的返回结构,实际支付方式可以为微信支付,支付宝支付,还有可能是开发者开发的支付方式。这样就需要定义一种事件的监听方案获取扩展返回的数据,系统定义了两种思路,一种是固定的数据结构比如云存储的,这种通过配置json文件,还有一种是带有很强的业务的,比如开发商城,可能有不同的营销模式,计算价格,不可能都写一遍订单流程,就需要营销去返回计算价格,这样就无法通过配置文件获取,而是同步获取对应方法,就需要同步事件处理。具体如何去考虑,可能有不同的解决方案,比如现在流行的分布式的解决方案,消息机制等等,然而针对单体结构,就要靠事件的扩展。
下面是针对有返回值的同步事件进行说明,比如支付创建,交易形式很多,每一种交易形式创建支付的时候要针对自身的交易形式返回对应的支付数据,支付根据获取的支付数据生成对应的支付流水号返回。
- 定义支付创建事件
- 注意命名结构:事件+EventDefiner extend CallbackListener<事件类>,内部定义事件类,返回结构类
- 事件调用,也就是对应创建支付的节点,这里对应支付中创建单据,调用方式与之前的异步执行事件相同
- 事件监听,这里支付创建的事件监听来源于具体的交易类型,比如商城订单创建支付单据,会员充值创建支付单据,这里以商城订单创建支付单据的监听为例
通过这种思路,支付与交易类型就完全分离,开发业务系统需要支付,只要定义交易类型,然后组装支付需要的数据结构,就可以调用支付。支付成功之后支付那边通过对应的交易类型,就可以调用到对应支付的支付成功后的方法,这样各自开发自己的扩展就可以了。