需求背景:
随着需求业务的高速发展,系统也已经从单应用服务发展为分布式服务;系统架构升级
很多个业务系统产生;再高速发展过程中,会发现各个系统迭代升级也很频繁,线上出现问题频率增多。为了更好的维护线上生态环境,想到一种方式,在系统中嵌入动态处理逻辑,使原有的业务逻辑发生改变。
为此提供一种解决方案,提高线上运行的生态环境 Distributed Unified Configuration Center
DUCC:分布式统一配置中心
实现原理+DEMO
1.动态代码实现原理
线程异步+httpClient+反射+动态代理
线程异步:实例化对象并初始化,循环异步HttpClient调用获取代码
反射:获取代码后,然后反射创建对象
动态代理:通过动态代理调用反射生成对象的方法
1.1动态配置实现原理
线程异步+httpClient
线程异步:实例化对象并初始化,循环异步HttpClient调用获取配置,同步到自定义集合
2.Jar 依赖
POM
自实现工具包
<dependency>
<groupId>com.ddky.dynamic</groupId>
<artifactId>dynamic-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
间接依赖:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>1.8.6</version>
</dependency>
3配置依赖
配置动态代理类添加在Spring xml 配置中
<bean id="dynamicConfigFactory" class="com.ddky.dynamic.proxy.GroovyProxyFactory">
<property name="serviceInterface" value="com.ddky.top.service.TopDynamicService"></property>
<property name="id" value="2"></property>
</bean>
com.ddky.dynamic.proxy.GroovyProxyFactory 动态代理工厂
com.ddky.top.service.TopDynamicService 动态代理接口
<property name="id" value="2"></property> 动态代理编码codeId
http请求根据 id 获取 代码
配置动态配置
<bean id="configManager" class="com.ddky.dynamic.impl.StringConfigManagerImpl">
<constructor-arg>
<list>
<value>1</value>
<value>3</value>
</list>
</constructor-arg>
</bean>
com.ddky.dynamic.impl.StringConfigManagerImpl 动态加载配置类并初始化
配置动态配置codeIds
http请求根据 id 获取 配置
<list>
<value>1</value>
<value>3</value>
</list>
也可以 自己new 对象实现对象创建
4.dynamic-web.war 动态管理平台
项目端口默认:80,自定义端口需要修改代码
Hosts配置 :127.0.0.1 config.ddky.com
1.新增代码实现类
2.新增动态配置
5.代码测试
通过Spring 管理注入对象dynamicConfigFactory,configManager
测试代码:
TopDynamicService dynamic = (TopDynamicService)dynamicConfigFactory.createInstance();
System.out.println(new Date());
long s = System.currentTimeMillis();
int count=0;
while(System.currentTimeMillis()-s<1000) {
boolean flag = dynamic.checkTest("");
Object o = configManager.getConfig(1);
Object o1 = configManager.getConfig(3);
count++;
if(count%1000000==0) {
System.out.println(flag);
System.out.println(o);
System.out.println(o1);
}
}
System.out.println(count);
System.out.println(new Date());
6应用场景
- 根据动态配置切换日志级别
- 根据动态配置添加白名单,黑名单
- 根据动态配置动态分配权限
- 根据动态灵活配置信息
- 根据动态类可以灵活控制业务逻辑,限流,降级等
还有其他应用场景…………
7.视频演示
动态配置实现视频.mp4
8.源码下载