首页 > 解决方案 > 如何用 Project Reactor 替换 Spring Events

问题描述

假设我有一个巨大的 Spring 应用程序。在其中的一部分中,执行了某种业务逻辑。我还需要执行一些不应该影响主进程的额外操作(例如,重新计算一些指标并将其保存到数据库)。为此,我使用 Spring Event 机制(当然是异步模式)。

@Service
public class MyService {
   @Autowired
   private ApplicationEventPublisher eventPublisher;

   public void doSomeUsefulStuffWithEntity(Long entityId) {
   //some operation here

   eventPublisher.publishEvent(new EntityHasChangedEvent(Long entityId));
   }
}


@Component
public class MyEventListener {
   @Async
   @EventListener
   public void onEntityEvent(EntityHasChangedEvent event) {
      //do some stuff here
   }
} 

很直截了当,不是吗。但是有一种观点认为 Spring Events 主要是为了 Bean 生命周期的目的,而不是为了业务任务。因此问题。什么是我需要的充分替代品?我应该使用以 Project Reactor 为代表的 Publisher-Subscriber 机制吗?如果是这样,它应该是什么样子?Spring Events 给了我不同域模块之间的弱内聚 - 我不知道如何用 Fluxes 实现同样的弱内聚。

标签: javaspringpublish-subscribeproject-reactor

解决方案


Project Reactor是一个旨在在 JVM 上构建非阻塞应用程序的库。这主要是出于性能原因,请参阅 Project Reactor 文档或深入阅读State of Loom

发布-订阅模式与非阻塞应用程序无关,它是一种适用于事件广播的消息模式。

由于这两件事没有可比性,因此您无法真正将其替换为另一件事。


推荐阅读