事件的处理需要考虑对于状态/数据的影响。所谓的状态是指数据的存储和变更;比如在压缩机处理中,每次来一个压缩任务,需要对其进行记录(Map形式,key是任务Id,value是压缩任务,以备压缩机发生异常后,能够追溯那个任务需要重新下发;这就增加了一个状态;其次,就是在压缩完成后,要从内存中删除这个状态。这个和前面说的匹配也是相关联。
其次要考虑在事件处理步骤中可能发生的异常的处理,比如数据库异常,上面提到的压缩异常,是否有异常流程来保证正常进行(通常需要配以告警操作),比如对于一些网络异常,是否需要将任务放置到重试列表中进行定时尝试重试,但是有一点,就是异常流和正常流的处理最好是分开,因为如果异常比较多,定时任务到了,可能会有大量的重新处理任务放置到待处理队列中,因为异常问题很可能会再再次问题,这样大量的重试任务将会挤占正常新来的任务;甚至一直被阻塞(大量的任务被重发,可能还没有处理完,第二波定时任务来了,又重新下发一次,这样新任务可能永远得不到执行);所以如果处理尽量可以处理为两套线程池,两套资源,但是对于正常分支则资源要有倾斜。