# elegent **Repository Path**: yangya66/elegent ## Basic Information - **Project Name**: elegent - **Description**: elegent框架 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-30 - **Last Updated**: 2025-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![](doc/images/logob.png) # Elegent组件库介绍 ## 什么是Elegent组件库 ​ 在微服务开发中,我们经常面临着各种各样的分布式问题,例如分布式锁、微服务之间的异步调用、异步调用的最终一致性的分布式事务的实现、token的续期、微服务的权限控制、接口的幂等性、数据的一致性、支付等等。我们每做一个项目,都在重复的造轮子,这些解决方案的代码和我们的业务代码混合在一起,对后续的代码维护造成了困扰。为了解决这个问题,传智研究院开发了一套用于解决这些分布式通用问题的组件库--- Elegent。使用它的四点理由: ​ (1)优雅封装、“干湿”分离。使用这套软件后,项目代码中几乎只剩下业务代码(湿代码),而解决方案相关的代码(干代码)被抽离到Elegent组件库中。 例如,我们要实现某个数据的一致性,通常采用延迟双删,而这种代码如果在业务代码中实现延迟双删,不利于维护。而使用ElegentDU(数据一致性框架)只需要一个注解就轻松完成。这样的代码更加优雅,可读性更强,更容易维护。 ​ (2)快速集成、应用简便。组件通过将复杂的解决方案代码进行封装,使得开发人员可以用最简单的代码快速实现,例如在方法上加一个注解。这样可以让一个初级开发人员在10分钟以内在项目中上手使用某个组件。 ​ (3)开闭原则,易于扩展。所有的组件都是使用接口设计,用户可以通过实现接口来扩展组件的功能。例如分布式事务框架Elegent ACTX默认使用redis作为数据存储中心,用户也可以通过编写数据中心接口的实现类来编写了mysql或者mongoDB 的逻辑。 ​ (4)统一接口,利于切换。通过使用统一的接口,除了让使用者学习成本低之外,还能有利于技术的切换。比如ElegentLock分布式锁组件,开始用户使用Redis的分布式锁,后来由于业务的需要,需要使用可靠性更强的consul分布式锁,用户只需要修改配置文件中的一个值即可切换,业务代码0修改。 ## Elegent组件库架构图 ![](doc/images/jg.png) ## Elegent 各组件简介 ### 分布式锁组件 ElegentLock ​ ElegentLock (优雅分布式锁) 通过对redisson、consul进行封装,可以让你更轻松、更优雅地在项目中集成分布式锁,让你更专注业务代码的开发。这个组件具有的特点: 1. 提供了redis分布式锁、redis红锁、consul分布式锁多种策略,用户可以根据自己的业务场景进行选择。 2. 提供了代码和注解两种实现方式。代码方式可以应对各种复杂的分布式锁场景,注解方式可以让代码更清爽,只需在方法上添加一个注解即可。 3. 通过看门狗实现consul 分布式锁的锁续命。 4. 对 redisson实现的 redis红锁再次封装,更易于使用。 ​ ### 异步调用框架 ElegentAC ​ ElegentAC(异步调用框架)是一款基于MQ的微服务异步调用框架。 这个框架可以让你更优雅地在项目中编写微服务异步调用的代码。这个组件具有的特点: 1. 支持 MQTT ,rabbitMQ、kafka 等 多种MQ的实现方式,并支持用户自行扩展。 2. 用最优雅的方式实现了消息的接收处理。接收消息只需要通过注解指定主题名称,主题支持通配符和变量,消息自动转换为发送时的 DTO类型,无需手动转换。 3. 为异步调用的链路,产生一个唯一的链路ID,这个ID可以被应用系统用于记录日志等。 4. 具备很强的扩展性,基于ElegentAC可以开发其它上层框架,比如下面介绍的ElegentACTX 就是基于ElegentAC的分布式事务框架。 ​ ### 分布式事务框架ElegentACTX ​ 微服务同步调用使用的分布式事务中间件是阿里的seata ,但是在异步调用场景下 seata就没有用武之地了。怎么办? 传统的方式,使用消息最终一致性来解决,但是代码不容易维护,特别是异步调用链路非常复杂的情况下,更是一团糟。用ElegentACTX 就可以轻松解决这个问题。这个组件具有的特点: 1. 通过注解的方式为每个微服务的方法开启事务,标注子事务。 2. 通过注解的方式为每个微服务的标记回滚方法,回滚的方法中包括原始方法的参数,以及用户自定义的暂存数据用于回滚。 3. 当某个微服务发生异常,会通知到每个微服务进行回滚逻辑处理。 4. 默认使用redis作为数据中心,用户可以自己扩展数据中心的实现。 ### 支付组件 ElegentPay ​ ElegentPay是封装了支付宝和微信支付的支付组件,该组件具有以下特点: 1. 为支付宝和微信提供了统一的调用入口。 2. 支持native支付、小程序支付等多种支付方式,并提供统一入口。 3. 提供了统一的dto类作为前端的调用参数,并且只有5个参数,用户使用简便。 4. 提供了扩展机制,用户可以自定义其它的支付方式。 5. 对支付回调提供了幂等性校验。 6. 提供了回调补偿功能。 ### 令牌刷新组件 ElegentToken ​ ElegentToken(令牌刷新组件)是针对于令牌过期问题开发的一款组件,该组件具有以下特点: 1. 支付单token和双token两种刷新机制。 2. 提供了默认的JWT实现方式,用户可以快速集成。 3. 用户可以自定义token的生成逻辑,易于扩展。 4. 代码侵入性低,让用户更关注业务的实现。 ​ ### 权限框架 ElegentAuth ​ ElegentAuth是一款针对微服务的权限框架,该组件具有以下特点: 1. 轻量级的权限框架,更易于学习,快速上手。 2. 以注解方式标注方法权限,无需复杂的初始配置。 ### 接口幂等性框架 Elegent IU ​ Elegent IU 是用于解决接口幂等性校验的框架,该框架具有以下特点: 1. 可以自定义幂等性参数名称。 2. 注解方式对方法进行幂等性增强。 3. 集成便捷。 ### 数据一致性框架 Elegent DU ​ 传统的缓存同步的方式,无论是先更新缓存后更新数据,还是先更新数据后更新缓存,都有可能造成缓存数据的不一致。ElegentDU 是用来保证数据缓存一致性的框架。该框架具有以下特点: 1. 提供了读多写少、写多读少、延迟双删三种更新策略。 2. 只需要注解,即可实现缓存一致性的实现,对业务代码0侵入。