WVP学习-二、入口以及redis消息通知

WVP学习-二、入口以及redis消息通知

启动入口

查看wvp源码发现启动代码如下

wvp启动 WVP学习-二、入口以及redis消息通知

这里可以看到wvp默认启动只是作为一个java普通应用在启动,启动后再在代码里面重新使用了springboot方式来启动,开始一直不明白这样做有什么意义,后来想了下估计是为了后面代码中有遇到问题后重启方便,因为可以看到main方法后面跟了一个restart方法,根据此来猜测的。

那么启动后代码下一步去了哪里,或者按什么顺序执行呢?按照正常的执行流程下一步应该是根据配置初始化容器相关的参数,建立连接redis,数据库之类的

wvp配置运行顺序 WVP学习-二、入口以及redis消息通知

注意到代码中存在很多@Order语句,大概猜测到执行顺序,实际的运行也是跟猜测的一样,如果按照这个order顺序一步步来,可以在其中打上断点验证,走到某一步时就会卡在断点这里无法到达下一步。那就按照order来查看启动后都做了什么吧。

来看看order=1的配置是什么

redis配置文件部分1 WVP学习-二、入口以及redis消息通知

redis配置文件部分2 WVP学习-二、入口以及redis消息通知

第一步做的就是配置redis,通过代码发现主要就干了一件事,给redis添加消息监听。

消息监听是redis2.8之后才有的功能,通过订阅消息事件在消息过期或者删除等操作时通知订阅方,以便订阅方开展下一步业务,该功能极大的方便了开发人员对事件的把控,以前比如消息过期通过消息队列来实现该功能,比如rabbitmq的死信队列或者插件,rocketmq的延迟功能,现在即使不需要专门的消息队列也可以完成该功能.具体消息理解可以参看这篇博客 redis消息通知

当然支持消息事件通知需要满足两个条件:

  1. redis版本大于2.8。0
  2. redis需要主动开启事件支持

开启方式需要将如下箭头所示语句加入到redis.conf中,红色方框中描述了配置方式
redis配置 WVP学习-二、入口以及redis消息通知

一般使用Ex或者AKE即可,Ex代表过期,AKE代表所有事件,配置好后重启redis后验证下是否成功。

可以模仿wvp的写法测试一个带过期时间的key事件消息,这里就不做测试了,只理解源码,可以看到源码中对很多消息做了监听,每个通道处理不同的业务。order为1的就这些代码逻辑,还是比较少的。