写点什么

面向线上的 springboot 开发框架 -Aradin

作者:liudaac
  • 2023-11-14
    北京
  • 本文字数:12106 字

    阅读完需:约 40 分钟

ARADIN

阿拉丁基础开发框架以 SpringCloud 及SpringCloud Alibaba为基础做上层通用功能包扩展,已发布至https://mvnrepository.com/artifact/cn.aradin,Github 地址https://github.com/liudaac/aradin


  • 规范依赖

  • 降低集成复杂度

  • 扩充能力以更好的满足线上场景

  • 解决部分新旧组件交替淘汰时发生的兼容性问题



主框架版本说明

1.0.2 (发布版,推荐使用,JDK8+)

SpringCloud 2021.0.8


SpringBoot 2.7.15


SpringCloudAlibaba 2021.0.4.0


Dubbo 3.1.11

1.1.0 (发布版,推荐使用,JDK17+)

SpringCloud 2022.0.4


SpringBoot 3.1.4


SpringCloudAlibaba 2022.0.0.0


Dubbo 3.2.7

历史版本

RELEASE 版 0.0.3.25(springcloud.Hoxton.SR12+springboot2.3.12.RELEASE+dubbo2.7)


RELEASE 版 0.0.3.26(springcloud.Hoxton.SR12+springboot2.3.12.RELEASE+dubbo3.1)


RELEASE 版 0.0.4.2(springboot2.7.5+dubbo3.1)


RELEASE 版 1.0.0(springboot2.7.10+dubbo3.1)


RELEASE 版 1.0.1(springboot2.7.12+dubbo3.1)


RELEASE 版 1.0.2(springboot2.7.15+dubbo3.1)


RELEASE 版 1.1.0(springboot3.1.4+dubbo3.2)




依赖管理


   <dependencyManagement>


      <dependencies>


         <dependency>


            <groupId>cn.aradin</groupId>


            <artifactId>aradin</artifactId>


            <version>${aradin.version}</version>


            <type>pom</type>


            <scope>import</scope>


         </dependency>


      </dependencies>


   </dependencyManagement>



模块结构

1、aradin-spring

spring 加强,面向线上使用场景,扩充协议文档、缓存、模板、心跳集成能力




  • aradin-spring-core

  •  基础能力模块

  •  ① cn.aradin.spring.core.algo.* 算法包 目前只有 SWRR 负载均衡

  •  ② cn.aradin.spring.core.bean.* BEAN 工具

  •    AradinBeanFactory BEAN 工厂类支持对指定 Class 通过 Prefix 命名方式进行路由,常用于某个类需要按规则初始化数量大于 1 的有限个 BEAN,比如分库逻辑,读写分离逻辑;

  •    AradinPropertySourceFactory 支持对 yml 配置文件的加载,使用方式

  •      @Configuration

  •      @PropertySource(value = "classpath:config.yml", factory = AradinPropertySourceFactory.class)

  •    方便灵活的布局配置文件

  •  ③ cn.aradin.spring.core.context.* 上下文运行时变量 支持三种模式,借鉴 SpringSecurity 源码中该功能实现方式

  •    MODE_THREADLOCAL;

  •    MODE_INHERITABLETHREADLOCAL;

  •    MODE_GLOBAL;


  •  默认为 MODE_THREADLOCAL 当前线程本地变量,支持配置入口 aradin.context.strategy


  •  ④ cn.aradin.spring.core.enums.* 常量包,字面理解

  •  ⑤ cn.aradin.spring.core.net.http.* HTTP 工具包,使用入口 HttpClientUtils

  •  ⑥ cn.aradin.spring.core.queue.* 轻量级内存队列,可用于低可靠性要求的使用场景,参考 AradinQueue 构造方法可以注入生产者及消费者

  •  ⑦ cn.aradin.spring.core.thread.* 线程池包,使用入口 AradinThreadManager

  •  ⑧ cn.aradin.spring.core.session.* Session 配置,需要搭配 @EnableSpringSession、@EnableRedisHttpSession 或者 @EnableAradinHttpSession 使用,用于替换 webserver 容器的默认 session 机制

  •    参考配置

  •    spring:

  •      session:

  •        cookie:

  •          name: ${COOKIE_NAME}

  •          max-age: 3600

  •          http-only: false

  •          security: false #若指定 domain 与当前域名不一致需要设置为 true

  •          same-site: None #若指定 domain 与当前域名不一致需要设置

  •          domain: #若 domain 与当前域名不一致需要设置




  • aradin-spring-acutator-starter

  •  心跳组件模块,在 spring 原生 actuator 基础上增加 inited,offline,online 三个服务管理节点

  •  ① /inited 查看服务的初始化状态

  •  ② /online 持续集成发布时增加上线后的处理逻辑,比如容器应用启动应用后执行指定的脚本文件(如日志采集),也支持扩展 Handler 实现业务高度定制的启动逻辑

  •      cn.aradin.spring.actuator.starter.extension.IOnlineHandler 会自动调用应用上下文中所有该类型的 BEAN

  •      此外还支持配置项 aradin.actuator.online.shell 配置启动脚本路径

  •  ③ /offline 方便下线时平滑关闭应用

  •      cn.aradin.spring.actuator.starter.extension.IOfflineHandler 会在自动调用应用上下文所有该类型的 BEAN 后才去调用 Spring 上下文的 close 方法

  •      平滑下线处理逻辑中包含 Kafka 消费端注销、Rabbit 消费端注销、Dubbo 服务端下线、SpringCloud 服务下线(以各项只有存在对应的依赖时才会执行对应的下线动作)

  •      平滑下线增加等待时间配置,即在上述注销动作结束后会 Sleep 配置的等待时间才会执行 context 的 destroy 动作

  •  ④ /state 运行状态检查

  •      offline 调用后会实时变更状态,替换原生的/health

  •  集成方式

  •      management.endpoints.web.exposure.include: inited,offline,online,state #开启需要的 endpoints

  •  补充配置

  •    aradin:

  •      acutator:

  •        online:

  •          shell: #定制启动脚本

  •        offline:

  •          shut-wait: #优雅停机配置,服务注销和销毁 context 间的时间间隔,单位 ms




  • aradin-spring-velocity-starter

  •  springboot2.x 之后不支持 velocity 的集成,考虑到旧项目模板代码迁移的复杂性,特别提供 velocity 的兼容包,能够很好的支持 springboot2 及 springboot3

  •     配置方式与原 velocity1.x 版本一致,例如

  •  spring:

  •    velocity:

  •      enabled: true #设定是否允许 mvc 使用 velocity

  •      cache: true #是否开启模板缓存

  •      check-template-location: true #是否检查模板路径是否存在

  •      prefix: null

  •      suffix: .vm #设定 velocity 模板的后缀

  •      date-tool-attribute: null

  •      number-tool-attribute: null

  •      resource-loader-path: classpath:/template/ #设定模板路径,默认为:classpath:/templates/

  •      toolbox-config-location: classpath:/toolbox.xml #设定 Velocity Toolbox 配置文件的路径,比如 /WEB-INF/toolbox.xml.

  •      prefer-file-system-access: true #是否优先从文件系统加载模板以支持热加载,默认为 true

  •     其中关于 toolbox.xml 的格式,参考 https://velocity.apache.org/tools/3.1/config-xml.html

  •     (注:此处 xml 的格式为 velocity3.1 版本,与旧版比有较大的格式改动且新旧不兼容,若旧项目使用 velocity1.x 的需要做格式调整,但大体配置逻辑一致调整比较简单)




  • aradin-spring-swagger-starter

  •  Swagger-bootstrap-ui 集成组件,选型的原因是相对原生 UI 更加友好

  •  ① cn.aradin.spring.swagger.starter.dto。Resp 标准返回结构

  •  ② 配置方式

  •   aradin:

  •     swagger:

  •       base-package: pk1;pkg2;pk3

  •       ant-path:

  •       title: 协议标题

  •       description: 协议描述

  •       version: 1.0.0

  •       enable: true

  •       contact-name:

  •       contact-email: liudaax@126.com

  •       contact-url:

  •       license:

  •       license-url:

  •       use-default-status: false




  • aradin-spring-caffeine-starter

  •  使用 Caffeineson 类包装内存缓存 Caffeine,实现对应的 CacheManager,支持 spring-cache 注解方式集成

  •    一般情况下,对于内存缓存的更新机制也分为两种:

  •      ① 利用 Caffeine 缓存自身的超时机制进行延时 Evict,在触发之前持久层对应的数据可能已经发生变更,

  •      所以对于更新的数据一定时间内存在不一致情况,此种使用方式更适合对一致性要求不严格或者不可变数据的缓存处理,

  •      比如 SessionID 上的使用可以有效降低 Redis 调用损耗;题目的缓存;热点商品信息的缓存;

  •      ② 利用分布式中间件,比如 nacos,zookeeper 进行变更的通知,以实现各节点内存缓存的同步更新;cachename 级别的版本变更控制,需要搭配**aradin-version**模块使用,**aradin-version-zookeeper-starter**和**aradin-version-nacos-starter**均提供了配置样例

  •      所以该模块对应支持普通模式以及基于版本管理机制的分布式更新模式:

  •      对应配置如下:

  •       aradin:

  •         cache:

  •           caffeine:

  •             clean-interval: PT20M#1.0.1 之后增加定时执行 cleanUp 逻辑,此处为执行间隔,主要原因是 Caffeine 的缓存过期逻辑为惰性清理,可能造成内存无法及时释放,线上场景建议按照实际需求进行适配

  •             defaults: #默认缓存配置

  •               expire-after-access: 1200000 #访问后过期时间,单位毫秒

  •               expire-after-write: 1800000 #写入后过期时间,单位毫秒

  •               initial-capacity: 100 #初始化大小

  •               maximum-size: 10000 #最大缓存对象个数,超过此数量时之前放入的缓存将失效

  •               allow-null-values: true #是否允许空值

  •               is-soft: true #是否启用软引用

  •               record-stats: true #是否开启状态统计

  •             configs: #自定义 cacheName 对应的缓存配置

  •               base: #具体的 cache 名,与 springcache 配合使用

  •                 expire-after-access: 3600000

  •                 expire-after-write: 3600000

  •                 initial-capacity: 100

  •                 maximum-size: 100000

  •                 allow-null-values: true

  •                 soft: true

  •                 record-stats: true #是否开启状态统计

  •               session:

  •                 expire-after-access: 7200000

  •                 expire-after-write: 7200000

  •                 initial-capacity: 100

  •                 maximum-size: 100000

  •                 allow-null-values: true

  •                 soft: true

  •                 record-stats: true #是否开启状态统计,可以配合 management.endpoints.web.exposure.include: caffeineson 来使用


  •    使用方式如下几种:

  •    ① 直接引用 Caffeineson Bean,配置参考 aradin.cache.caffeine.defaults

  •    ② 引用 CaffeinesonCacheManager Bean 按 CacheName 获取 Caffeineson 实例

  •    ③ 搭配 @EnableCache 注解,使用方式 @Cachable(cacheManager=CaffeinesonConfiguration.CACHE_MANAGER)

  •    ④ 提供 Endpoint 入口查询 Caffeine 状态 caffeineson,参考 record-stats 配置说明,可以按照 aradin-spring-acutator-starter 的配置方式进行开放

  •      监控项参考 https://github.com/liudaac/aradin/blob/main/aradin-spring/aradin-spring-caffeine/src/main/java/cn/aradin/spring/caffeine/manager/stats/CaffeinesonStatsService.java

  •    注:各配置项的设置可以参考 https://github.com/ben-manes/caffeine/wiki/Memory-overhead-zh-CN 中的内存占用指标




  • aradin-spring-redis-starter

  • 这个模块目前实现了两个重点功能:

  •  一、针对于 spring-cache 注解的使用优化

  •  替换掉了 spring-boot-starter-data-redis 中默认 CacheManager 实现(由于原生实现不支持多种缓存方式共存),对于各 CacheName 的初始化使用自定义配置项

  •  配置方式如下

  •   首先是原生配置

  •    spring:

  •      data:

  •        redis:

  •          database: 0 #Redis 数据库索引(默认为 0)

  •          host: #Redis 服务器地址

  •          port: 6379 #Redis 服务器连接端口

  •          password: #Redis 服务器连接密码(默认为空)

  •          lettuce:

  •            pool: #连接池配置,不再详细列出

  •   然后是通过自定义配置来定制各个 cachename 的属性


  •   aradin:

  •     cache:

  •       redis:

  •         defaults:

  •           ttl: PT60M #https://blog.csdn.net/huang007guo/article/details/81625061

  •           ttl-offset: PT60M #指定随机 offset,解决缓存雪崩问题

  •           cache-null-values: true

  •           key-prefix: default_

  •           use-key-prefix: true

  •         configs:

  •           base:

  •             ttl: PT12H

  •             ttl-offset:

  •             cache-null-values: true

  •             key-prefix: base_

  •             use-key-prefix: true

  •           client:

  •             ttl: PT4H

  •             ttl-offset:

  •             cache-null-values: true

  •             key-prefix: client_

  •             use-key-prefix: true



 二、针对于 redis 大集合分桶操作的支持(v1.0.2+)


  面向实际业务场景时,随着数据量的增加,对于 hashmap 和 set 的操作往往伴随着大 key 问题,这时候常用的策略都是对数据进行分桶,但目前 spring 针对于 redis 的实现并未支持,需要集成方在上层手动进行,并不方便。


  该模块做的,就是提出了 RedisBucketTemplate 的概念,并提供了 BucketHashOperations,BucketSetOperations(单机模式),ClusterBucketSetOperations(集群模式)操作类,来统一托管分桶逻辑以及桶聚合操作。


  对于 Set 的操作类之所以提供了两个 Operations,是由于 set 提供的 api 存在跨 Key 操作,单机可以完全在 redis 中进行,而集群模式下由于 key 的分布在不同的 slot 中,跨 key 操作的支持需要转到内存中进行。




  • aradin-spring-redisson-starter

  •  RedissonClient 实例初始化,配置方式与 spring-redis 配置一致,无需额外配置项




  • aradin-spring-session-starter(v1.0.2+)

  •  spring-session-data-redis 的实现依赖 spring.redis.*配置,这会造成 session 用的 redis 和业务 redis 高度绑定,在实际使用场景中,存在多服务共享 session 但不愿共享 redis 的场景。spring-session-data-redis 中 RedisConnectFactory 引入方式虽然提供了 @SpringSessionRedisConnectionFactory 扩展槽来定制 redis,但会造成默认 RedisConnectFactory 实例不再初始化,所以并不实用。

  •  该模块实现了对默认 redissession 实现的替换,使用 aradin.session.redis.*来定制 session 用的 redis 实例,同时使用 @EnableAradinHttpSession 注解实现对 @EnableRedisHttpSession 注解的替换。

  •  配置方式如下

  •    aradin:

  •      session:

  •        redis:

  •          database: 0 #Redis 数据库索引(默认为 0)

  •          host: #Redis 服务器地址

  •          port: 6379 #Redis 服务器连接端口

  •          password: #Redis 服务器连接密码(默认为空)

  •          lettuce: #连接池配置,不再详细列出


  •            pool: #连接池配置,不再详细列出





  • aradin-spring-salarm-starter

  •  告警通知模块,类似 log4j 的 API,实现 Content 的组装和发送,发送目标默认只提供控制台输出

  •    ① cn.aradin.spring.salarm.starter.handler.ISalarmHandler 实现该接口 Bean 实例,自定义各个通知渠道逻辑

  •    ② cn.aradin.spring.salarm.starter.notifier.ISalarm 调用入口,负责告警消息的拼装,去重以及全局 ISalarmHandler 的分发,引用方式为 Bean 引用

  •    ③ 配置项

  •      aradin:

  •        salarm:

  •          ttl: PT1H # Min interval for sending a same alarm

  •          level: warn # Min level to send




  • aradin-spring-xxljob-starter

  •  Xxljob 自动配置,配置项与官方建议一致

  •    配置项

  •      xxl:

  •        job:

  •          admin:

  •            addresses:

  •          access-token:

  •          executor:

  •            appname:

  •            ip:

  •            port:

  •            logpath:

  •            logretentiondays:



2、aradin-alibaba

合并了必要的依赖项和配置样例,并未做额外开发


  • aradin-alibaba-nacos-starter

  • aradin-alibaba-sentinel-starter



3、aradin-mybatis

  • aradin-mybatis-plus-starter

  •  增加了开启分页的配置,由于默认情况下 Page 查询是必要的,无需下沉到项目实现中再开启



4、aradin-lucene

  • aradin-lucene-solr-starter

  •  使用自定义配置初始化 CloudSolrClient Bean

  •  配置如下


  •    spring:

  •      data:

  •        solr:

  •          zk-hosts:

  •            - 192.168.1.1:2181

  •            - 192.168.1.2:2181

  •            - 192.168.1.3:2181

  •          chroot: /solrcloud




5、aradin-zookeeper

  • aradin-zookeeper-boot-starter

  •  可同时配置多个 ZK 集群,并绑定事件路由机制

  •   支持的使用方式如下

  •   ① 事件接收方式 实现 cn.aradin.zookeeper.boot.starter.handler.INodeHandler Bean 实例 通过 support 方法进行事件过滤,handler 方法实现事件的处理

  •   ② ZK 集群配置方式

  •     aradin:

  •       zookeeper:

  •         addresses: #支持多组

  •           - id: CUSTOMIZED-ZOOKEEPER-ADDRESS-ID

  •             address: 192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181/CHROOT


  •   ③ ZKClient 获取方式 ZookeeperClientManager.getClient(String id)



6、aradin-version

版本分发引擎,建立标准的版本控制分发机制,并支持选择性集成 zookeeper,nacos 中间件


  • aradin-version-core

  •  版本分发通用模块,对版本分发的上层逻辑进行抽象,并提供分布式一致性中间件的扩展入口,目前支持 zookeeper、nacos

  • ① cn.aradin.version.core.dispatcher.VersionDispatcher 唤起所有的IVersionHandler(Bean)进行版本变更的发布

    ② cn.aradin.version.core.gentor.IVersionGentor 新版本号生成器,提供默认实现

    ③ cn.aradin.version.core.handler.IVersionBroadHandler 版本发布逻辑,默认实现只打印至控制台,需要根据不同中间件对应不同具体实现

    aradin-version-zookeeper-starter.VersionZookeeperBroadHandleraradin-version-nacos-starter.VersionNacosBroadHandler

    ④ cn.aradin.version.core.properties.VersionProperties 相关配置项 **aradin.version**





  • aradin-version-zookeeper-starter

  • ① cn.aradin.version.zookeeper.starter.handler.VersionsNodeHandler

  • *接收 ZK 事件并使用 VersionDispatcher(Bean)进行分发,接收方为所有的 cn.aradin.version.core.handler.IVersionHandler(Bean)*

  • ② cn.aradin.version.zookeeper.starter.handler.VersionZookeeperBroadHandler

  • *ZK 的版本广播触发入口,方便人工触发版本变更事件*

  • ③ 配置样例

  • aradin:

  •   version:

  •     zookeeper:

  •       address-id: CUSTOMIZED-ID

  •   zookeeper:

  •     enable: true #default true

  •     session-timeout: 5000 #default 5000

  •     connection-timeout: 5000 #default 5000

  •     addresses:

  •       - id: CUSTOMIZED-ID

  •         address:




  • aradin-version-nacos-starter(v1.0.0+)


  • ① cn.aradin.version.nacos.starter.listener.VersionNacosConfigListener

  • *接收 Nacos 事件,并使用 VersionDispatcher(Bean)进行分发,接收方为所有的 cn.aradin.version.core.handler.IVersionHandler(Bean)*

  • ② cn.aradin.version.nacos.starter.handler.VersionNacosBroadHandler

  • *Nacos 的版本广播触发入口,方便人工触发版本变更事件,另外初始化时同时为指定的 group data-id 绑定 listener*

  • ③ 配置样例

  • aradin:

  •   version:

  •     nacos:

  •       server-addr: #若不配置与 spring.cloud.nacos 一致

  •       username: #若不配置与 spring.cloud.nacos 一致

  •       password: #若不配置与 spring.cloud.nacos 一致

  •       namespace: #若不配置与 spring.cloud.nacos 一致

  •       group: #必填

  •       data-ids: #必填,data-id 列表

  • spring:

  •   cloud:

  •     nacos:

  •       username:

  •       password:

  •       config:

  •         enabled: true

  •         server-addr: 192.168.1.1:8888,192.168.1.2:8888,192.168.1.3:8888

  •         namespace: d78b658c-182a-420a-9005-e8e8f36a1e7d

  •         group-id: aradin.version.nacos.group

  •         data-id: aradin.version.nacos.data-id





  • aradin-version-caffeine-starter 整合 aradin-version-zookeeper-starter 实现分布式内存缓存

  •  aradin-version-caffeine-starter 中实现了位于 VersionDispatcher(Bean)下游的 IVersionHandler(cn.aradin.spring.caffeine.manager.version.CaffeinesonVersionHandler)实现内存信息的版本淘汰机制

  •  ① 相关配置如下:可以参考复用至 nacos 集成

  • aradin:

  •   version:

  •     zookeeper:

  •       address-id: CUSTOMID

  •   zookeeper:

  •     addresses:

  •       - id: ${aradin.version.zookeeper-address-id}

  •         address: 192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181/chroot

  •   cache:

  •     caffeine:

  •       defaults: #默认缓存配置

  •         expire-after-access: 1200000 #访问后过期时间,单位毫秒

  •         expire-after-write: 1800000 #写入后过期时间,单位毫秒

  •         initial-capacity: 100 #初始化大小

  •         maximum-size: 10000 #最大缓存对象个数,超过此数量时之前放入的缓存将失效

  •         allow-null-values: true #是否允许空值

  •         is-soft: true #是否启用软引用

  •       configs: #自定义 cacheName 对应的缓存配置

  •         base: #具体的 cache 名,与 springcache 配合使用

  •           expire-after-access: 3600000

  •           expire-after-write: 3600000

  •           initial-capacity: 100

  •           maximum-size: 100000

  •           allow-null-values: true

  •           is-soft: true

  •           versioned: true #标识当前 cache 是否开启分布式更新,默认为 false

  •         session:

  •           expire-after-access: 7200000

  •           expire-after-write: 7200000

  •           initial-capacity: 100

  •           maximum-size: 100000

  •           allow-null-values: true

  •           is-soft: true


  •  ② 缓存失效的手动触发

  •  **IVersionBroadHandler(Bean).broadcast(String group, String key);**

  •  group 为 aradin.cache.caffeine.group,key 为 cacheName,对应的 cache 将被清空达到被动更新的目的




  • aradin-version-caffeine-starter 整合 aradin-version-nacos-starter 实现分布式内存缓存

  •  aradin-version-caffeine-starter 中实现了位于 VersionDispatcher(Bean)下游的 IVersionHandler(cn.aradin.spring.caffeine.manager.version.CaffeinesonVersionHandler)实现内存信息的版本淘汰机制

  •  ① 相关配置如下:可以参考复用至 nacos 集成

  • aradin:

  •   version:

  •     nacos:

  •       username: #选填,默认与 spring.cloud.nacos 一致

  •       password: #选填,默认与 spring.cloud.nacos 一致

  •       server-addr: #选填,默认与 spring.cloud.nacos 一致

  •       namespace: #选填,建议与项目配置做隔离

  •       group: #必填

  •       data-ids: #必填,data-id 列表,需要管理的 cacheName 加进来即可

  •   cache:

  •     caffeine:

  •       defaults: #默认缓存配置

  •         expire-after-access: 1200000 #访问后过期时间,单位毫秒

  •         expire-after-write: 1800000 #写入后过期时间,单位毫秒

  •         initial-capacity: 100 #初始化大小

  •         maximum-size: 10000 #最大缓存对象个数,超过此数量时之前放入的缓存将失效

  •         allow-null-values: true #是否允许空值

  •         is-soft: true #是否启用软引用

  •       configs: #自定义 cacheName 对应的缓存配置

  •         base: #具体的 cache 名,与 springcache 配合使用

  •           expire-after-access: 3600000

  •           expire-after-write: 3600000

  •           initial-capacity: 100

  •           maximum-size: 100000

  •           allow-null-values: true

  •           is-soft: true

  •           versioned: true #标识当前 cache 是否开启分布式更新,默认为 false

  •         session:

  •           expire-after-access: 7200000

  •           expire-after-write: 7200000

  •           initial-capacity: 100

  •           maximum-size: 100000

  •           allow-null-values: true

  •           is-soft: true


  •  ② 缓存失效的手动触发

  •  **IVersionBroadHandler(Bean).broadcast(String group, String key);**

  •  group 为 aradin.cache.caffeine.group,key 为 cacheName,对应的 cache 将被清空达到被动更新的目的



7、aradin-cluster

  • aradin-cluster-core

  •  集群模块,可以借助 zookeeper,nacos 实现集群节点的注册和节点列表的获取,该模块通过 IClusterNodeManager 对集群信息进行托管,依赖 zk 或 nacos 模块实现集群信息的更新。此外,该模块还提供了集群的通用注册配置

  •  ① 相关配置如下:

  • aradin:

  •   cluster:

  •     node-name: #节点注册名

  •     register: true #当前节点是否注册到集群中,默认为 true

  •     prefer-ip-address: #节点注册名是否偏向于 ip 地址,当 node-name 不指定时,可以生成默认名

  •     max-node: #当前集群支持的最大节点数

  • aradin-cluster-zookeeper-starter

  •  基于 ZK 实现集群节点的注册和同步

  •  ① 相关配置如下:

  • aradin:

  •   cluster:

  •     zookeeper:

  •       address-id: #和 aradin-zookeeper-boot-starter 的配置关联

  • aradin-cluster-nacos-starter

  •  基于 nacos 实现集群节点的注册和同步,原理是借助 cluster 独占的方式来确定各节点的序号,注意的是发布建议逐节点滚动发布,原因是目前 nacos 注册+注销操作频繁可能会有数据一致性问题,

  •  ① 相关配置如下:

  • aradin:

  •   cluster:

  •     nacos:

  •       username:

  •       password:

  •       server-addr:

  •       namespace: #建议和服务注册发现的命名空间分离,防止有干扰

  •       group:

  •       service-name:



8、aradin-external

 外部模块重写,目前包含 springfox-swagger,原因是 swagger 近两年未做更新,与 spring 新版有兼容问题,所以做了本地化适配修改,0.0.4.x 以后,兼容 springboot2.7.X




  • springfox-core

  • springfox-schema

  • springfox-spi

  • springfox-spring-web

  • springfox-swagger2

  • springfox-swagger-common

  • swagger-bootstrap-ui

  •  swagger 近两年未做更新,与 spring 新版有兼容问题,所以做了适配修改,1.0.x+版本兼容 springboot2.7.x,1.1.x 兼容 springboot3.1.x,可直接引用 aradin-spring-swagger-starter




  • velocity-tools-jakarta(v1.1.0+)

  •  springboot3 正式进入 jakarta 时代,但 velocity 已经停止了迭代,由于老项目的 velocity 模板迁移到其他模板的工程量巨大,对老项目框架升级造成了阻碍,所以针对这块做了适配修改,可直接引用 aradin-spring-velocity-starter




  • xxl-job-core

  •  原版 core 包在 log4j 和 spring-context 存在强依赖,导致 jar 包出现包冲突,本地化适配修改,可直接引用 aradin-spring-xxljob-starter



9、aradin-easy

 方便客户端调用方的构造,目前先对 Http 各种请求模式进行了支持,




  • aradin-easy-http

  •  参考 springmvc 注解方式提供 Http 接口类的注解及执行代理,同时做到对 spring 无依赖,新旧项目均能接入,基于 jdk 动态代理实现对 Http 接口类的代理




  • aradin-easy-http-buddy

  •  对 aradin-easy-http 中代理实现的构造进行了重写,基于 ByteBuddy 实现对 Http 接口类的代理

  • 接口类可以参考 https://github.com/liudaac/aradin/blob/main/aradin-easy/aradin-easy-http-buddy/src/test/java/cn/aradin/easy/http/compare/result/NcClient.java

  • 代理类构造,使用工厂模式 EasyBuilder.ins().service(NcClient.class)

  • 请求方法支持 GET、POST,请求体支持 QueryParam, Formdata, JSON, String,同时支持加密方法的注册,实现传参前的编码


在 Http 接口类的代理构造上,对 jdk 动态代理和 bytebuddy 字节码增强进行了对比,参考https://github.com/liudaac/aradin/issues/6



进展阶段

 目前迭代至 1.1.1 版本,经过大量的线上场景验证和磨合,已基本满足日常项目快速搭建需求,且已经普遍运行于线上环境。


 JVM 兼容 jdk8 至 17,当前支持 springboot3.1.5,后面等 spring 官方 2023 年 11 月停止维护 2.7.x 并推出 3.2.x 后,


aradin 框架将从 1.2.x 开始以 jdk21 为基座支持 springboot3.2.x,同时保持 1.1.x 对 springboot3.1.x 的支持,跟进 SpringCloud 及 Alibaba 全家桶的生态升级



JOIN US

      我们致力于为 Javaer 提供更加快捷的项目搭建途径,所以无论对该项目有任何的见解,都欢迎来交流,如果有其他需要补充的功能或者对现有模块的 Fix,也欢迎不吝提交你的 issue,审核通过即可加入本项目开发


      开发者邮箱


liudaax@126.com


      钉群



发布于: 刚刚阅读数: 8
用户头像

liudaac

关注

还未添加个人签名 2018-02-27 加入

还未添加个人简介

评论

发布
暂无评论
面向线上的springboot开发框架-Aradin_springboot_liudaac_InfoQ写作社区