背景
派单的需求在系统中是很常见的功能,除了本次商务审核中心的派单,还有订单系统中共享设计的派单,施工管理中的派单等,这些功能都可以在后台系统统一评估和设计。至少可以做一个通用的自动派单的方案,以支撑所有派单的业务场景。基于电站管理系统的现状和未来规划,通用的派单业务场景设计方案在可预见的发展和演变过程中一定会有很多用武之地。
理想派单方案的期望
- 实时性
- 优先级
- 业务解耦
- 可复用
- 派单规则可配置(如优先级,接单数量,)
- 自动化(或可支持人工)
- 可重复派单
- 堆积能力
可选方案分析
通过对订单系统现有业务方案的了解,和市场派单方案的调研,总结出可用的自动派单方案如下:
- 定时任务
定时任务较为简单,通过后台定时捞取一定的工单,实现工单和工单处理人(接单人)的关联等逻辑。该方案较为简单明确,但是很难保证实时性,为了解决这个问题,可以通过前端提供按钮人工触发的方式来弥补。总的来说,实现方案简单,开发成本较低,用户体验差强人意。 - Java队列+观察者模式
Java队列+观察者模式,相对于定时任务的方案,实时性较好一些,但是队列中数据可能会占用内存,observer在运行过程中后台可能会启动多个线程来处理任务,每次循环也会占用一定的CPU,甚至有时资源消耗很大。所以,整体来说对服务器资源消耗较大,存在一定的问题隐患。 - 消息中间件(Redis、Kafka、RocketMQ)
使用消息中间件最大的好处,可以从架构层面实现业务解耦。消息中间件也是发布订阅模式(观察者)的体现,某种程度上可以视为方案2的增强版,且扩展性复用性更好。但是这种方案有一定的使用门槛,因此带来的开发成本略高一些。站在系统架构层面,综合考虑业务应用场景,长期来看具有很高的ROI。
具体到JMS的选择上,也有很多方案,(各个JMS比价略)