详解基于Spring Data的领域事件发布(data,spring,领域事件,编程语言)

时间:2024-05-02 19:18:51 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    %E8%AF%A6%E8%A7%A3%E5%9F%BA%E4%BA%8ESpring+Data%E7%9A%84%E9%A2%86%E5%9F%9F%E4%BA%8B%E4%BB%B6%E5%8F%91%E5%B8%83

领域事件发布是一个领域对象为了让其它对象知道自己已经处理完成某个操作时发出的一个通知,事件发布力求从代码层面让自身对象与外部对象解耦,并减少技术代码入侵。

使用applicationEventPublisher.publishEvent在领域服务处理完成后发布领域事件,此方法需要在业务代码中显式发布事件,并在领域服务里引入ApplicationEventPublisher类,但对领域服务本身有一定的入侵性,但灵活性较高。

此方法实事件类型定义在实体中,与领域服务完全解耦,没有入侵。系统会在orderRepository.save(saleOrder)后自动调用事件发布,另delete方法不会调用事件发布。

@EventListener没有事务支持,只要事件发出就可监控到

上述情况会造成事务失败回滚,但事件监控端已经执行,可能导致数据不一致的情况发生

2. 使用@TransactionalEventListener监听事件

使用TransactionPhase.AFTER_COMMIT可在事务完成后,再执行事件监听方法,从而保证数据的一致性

由于@DomainEvents作用在实体上的,只有刚orderRepository.save(saleOrder)执行成功后才会发送事件,故AFTER_ROLLBACK方法只会在同一事务中其它语句执行失败或显式rollback时才会执行,如果save方法执行失败,将不会监听到回滚事件。

4. @Async异步事件监听

在分布式结构下,通过MQ发送事件通知给其它服务,为解决一致性问题,防止对方服务处理失败可先将事件保久化到数据库后,再重试。

到此这篇关于详解基于Spring Data的领域事件发布的文章就介绍到这了,更多相关Spring Data 领域事件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

本文:详解基于Spring Data的领域事件发布的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Spring security登录实现原理是什么下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18