专栏名称: macrozheng
专注Java技术分享,解析优质开源项目。涵盖SpringBoot、SpringCloud、Docker、K8S等实用技术,作者Github开源项目mall(50K+Star)。
今天看啥  ›  专栏  ›  macrozheng

Spring Event别瞎用!从我司的悲剧中,总结了6条最佳实践!

macrozheng  · 公众号  · 电商 互联网安全  · 2025-01-17 14:10
    

主要观点总结

本文介绍了Spring Event框架在业务系统中的实际应用,包括使用Spring Event时需要注意的关键问题和最佳实践。文章还讨论了Spring Event与MQ的区别,以及各自适用的场景。

关键观点总结

关键观点1: Spring Event框架简介

Spring Event框架基于事件的发布订阅机制,允许开发者自定义事件并在某些业务场景中发布,Spring会广播这些事件给相应的监听者。

关键观点2: 使用Spring Event的前提条件

为了确保Spring Event的可靠使用,业务系统必须首先实现优雅的关闭服务。此外,服务启动阶段也可能出现Spring Event事件丢失的问题,因此需要注意服务启动时机。

关键观点3: Spring Event适用场景

Spring Event适用于最终一致性的业务场景,如订单提单成功后的资源释放等。对于强一致性的业务场景,如提单阶段库存扣减和订单提单成功的完全一致性,Spring Event可能会有问题。

关键观点4: 提高Spring Event的可靠性

使用SpringEvent时需要有额外的可靠性保证,如提供重试能力和保证订阅者逻辑的幂等性。重试可以通过使用@Retryable注解或依赖Kafka消费组的重试机制来实现。

关键观点5: Spring Event与MQ的比较

Spring Event和MQ都属于订阅发布模式的应用,但MQ更适合应用之间的解耦、隔离和事件通知,而Spring Event更适合应用内的订阅发布。


文章预览

Boot+Cloud项目学习: macrozheng.com 作者:五阳 来源:juejin.cn/post/7313387525819973671 今天我们重点聊聊使用 Spring Event 最为关键的几个问题。这是我司线上生产环境实际踩坑后,总结的极为宝贵的经验! Spring Event框架实现了基于事件的发布订阅机制。开发者可以自定义事件,在某些业务场景发布事件,Spring 会将该事件广播给监听该事件的监听者。监听者可以实现Spring 的监听者接口 ApplicationListener 注册自己,也可以使用 EventListener 注解注册自己。 这是Spring Event 的简短介绍,网上有大量的入门级教程,我在此不过多赘述,进入正文! 1. 为什么说:业务系统一定要先实现优雅关闭服务,才能使用 Spring Event? Spring  广播消息时,Spring会在 ApplicationContext 中查找所有的监听者,即需要 getBean 获取 bean 实例。然而 Spring 有个限制———— ApplicationContext 关闭期间 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览