如何在JAVA系统嵌入动态逻辑

需求背景:

随着需求业务的高速发展,系统也已经从单应用服务发展为分布式服务;系统架构升级

很多个业务系统产生;再高速发展过程中,会发现各个系统迭代升级也很频繁,线上出现问题频率增多。为了更好的维护线上生态环境,想到一种方式,在系统中嵌入动态处理逻辑,使原有的业务逻辑发生改变。

 

为此提供一种解决方案,提高线上运行的生态环境 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应用场景

  1. 根据动态配置切换日志级别
  2. 根据动态配置添加白名单,黑名单
  3. 根据动态配置动态分配权限
  4. 根据动态灵活配置信息
  5. 根据动态类可以灵活控制业务逻辑,限流,降级等

还有其他应用场景…………

7.视频演示

动态配置实现视频.mp4

 

8.源码下载

JAVA系统嵌入动态逻辑源码

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值