事件驱动架构的实现与优化
在软件开发中,处理复杂的现实业务需求往往需要灵活且高效的架构。本文将介绍如何通过事件驱动架构来应对新的业务需求,以及相关的代码实现和优化过程。
新需求带来的架构挑战
在实际业务场景中,像仓库管理系统、物流调度系统和薪资系统这类需要长时间运行并管理现实流程的软件,常常会遇到各种意外情况。例如,库存盘点时发现商品因漏水损坏、货物因文件缺失被海关扣留、原材料短缺导致无法生产等。这些情况都可能需要在系统中更改批次数量。
当批次数量发生变化时,如果新数量低于已分配的总量,就需要进行订单的重新分配。为了实现这一需求,我们可以定义一个名为 change_batch_quantity
的服务,它能够调整批次数量并处理多余订单的分配问题。每次重新分配都会触发一个 AllocationRequired
事件,该事件会被传递给现有的 allocate
服务进行处理。这样,消息总线就能帮助我们遵循单一职责原则,并在事务和数据完整性方面做出合理选择。
架构变革的设想
我们的系统中有两种数据流:一种是通过 API 调用由服务层函数处理,另一种是内部事件及其处理程序。如果将所有操作都视为事件处理程序,那么服务层函数也可以成为事件处理程序,这样就无需区分内部和外部事件处理程序。例如, services.allocate()
可以是 AllocationRequired
事件的处理程序,并发出 Allocated
事件; services.add_bat