【发布时间】:2021-05-11 09:08:22
【问题描述】:
我目前在春季使用番石榴的事件总线,虽然目前一般功能运行良好,但我遇到了以下问题:
当用户想要更改“Line”实体上的数据时,这将在后端服务中照常处理。在此服务中,数据将首先通过 JPA 持久化,然后我创建一个“NotificationEvent”并引用已更改的实体。通过 EventBus,我将线路的引用发送给所有订阅者。
public void notifyUI(String lineId) {
EventBus eventBus = getClientEventBus();
eventBus.post(new LineNotificationEvent(lineId));
}
事件总线本身是在后台使用 new EventBus() 创建的。
现在在这种情况下,我的订阅者位于前端,在 @Transactional 领域之外。因此,当我更改数据时,发布事件并让订阅者从数据库中获取所有必要的更新,实际事务尚未提交,这使得订阅者获取旧数据。
我能想到的唯一快速解决方法是异步处理它并等待一两秒钟。但是在事务提交后,还有其他方法可以使用 guava 发布事件吗?
【问题讨论】: