个人知乎
基础六/功能六-异步队列实现赞踩站内信
基本概念
同步业务
request->controller->service
立即执行
异步业务
service不立即处理,仅把它置入待处理事件缓冲池
比如:点赞同时异步发送站内信
事件缓冲池
单向队列/优先队列
结构
package:async
EventType
记录事件的类型
EventModel
具体事件的内存模型
事件类型,触发者,时间,接收者等...
EventProducer
@Service,事件入队服务
fireEvent(EventModel)
利用jedis.list+对象序列化实现List<JSON(EventModel)>
EventHandler
所有Handler接口
doHandle:
具体handler的不同处理
List<EventType> getSupportEventTypes()
注册handler所关心的事件类型,通过Handler查type
EventConsumer
分发Event给Handler
利用applicationContext自动构造出所有Type,List
并启动线程
Map<EventType,List<EvenHandler> >config
记录某种类型需要经历的多个Handler,通过type反查
Handler
Thread
一个不断从jedis中取JSON并反序列化成EventModel的线程
并将该事件分发个对应的EventHandler
具体Handler
实现EventHandler接口
处理可以异步的业务
例子
在controller调用Service的同时,将一个异步事件加入到队列
举一反三
网络编程事件包分发给不同的handler