假设我有一个巨大的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在不同的域模块之间给了我一个弱内聚——我不知道如何用通量实现同样的弱内聚。
1条答案
按热度按时间xdnvmnnf1#
projectreactor是一个库,设计用于在jvm上构建非阻塞应用程序。这主要是出于性能原因,请参阅项目reactor文档或深入了解loom的读取状态。
发布-订阅模式与非阻塞应用程序无关,它是一种适合事件广播的消息传递模式。
因为这两件事是不可比的,所以你不能用另一件来代替。