如何用projectreactor替换spring事件

3npbholx  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(331)

假设我有一个巨大的spring应用程序。在它的一部分中,执行了某种业务逻辑。我还需要执行一些附加操作(例如,重新计算一些度量并将其持久化到db),这些操作不应影响主进程。为此,我使用spring事件机制(当然是异步模式)。

@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事件主要是为了bean生命周期的目的,而不是为了业务任务。这就是问题所在。什么是足够的替代品来满足我的需要?我应该使用projectreactor表示的发布者-订阅者机制吗。如果是的话,它应该是什么样子?SpringEvents在不同的域模块之间给了我一个弱内聚——我不知道如何用通量实现同样的弱内聚。

xdnvmnnf

xdnvmnnf1#

projectreactor是一个库,设计用于在jvm上构建非阻塞应用程序。这主要是出于性能原因,请参阅项目reactor文档或深入了解loom的读取状态。
发布-订阅模式与非阻塞应用程序无关,它是一种适合事件广播的消息传递模式。
因为这两件事是不可比的,所以你不能用另一件来代替。

相关问题