【发布时间】:2021-03-10 18:16:07
【问题描述】:
假设我有一个巨大的 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 实现同样的弱内聚。
【问题讨论】:
-
改变你的看法,因为那是错误的。 Spring Security 等使用它来发布身份验证/自动化事件。 Spring 本身会发布有关正在处理的请求等的事件。
标签: java spring publish-subscribe project-reactor