苍穹开放性扩展原创
金蝶云社区-贺召军
贺召军
11人赞赏了该文章 1,037次浏览 未经作者许可,禁止转载编辑于2022年04月05日 23:40:56

简介


    苍穹开放性扩展,通过配置开放性扩展接口,用户可以使用自定义的服务注册查找,服务限流熔断等。  


服务RPC开发性扩展


    苍穹默认使用dubbo作为微服务RPC框架。

服务RPC接口

    通过服务rpc接口扩展,可使用自定义微服务框架。


服务启动


     kd.bos.mservice.spi.rpc.MServiceStarter,用于启动rpc服务,如读取配置,监听端口,初始化rpc服务等等。

方法 功能   
start(long time) 开始启动RPC服务
endStart() 完成启动RPC服务

服务注册

    kd.bos.mservice.spi.rpc.MServiceRegister,用于注册服务接口到rpc服务中,包括服务消费方和服务提供方。

方法功能 注意事项  
registerConsumer(String name, String properties) 注册服务消费方 properties:interface名
registerService(String name, String properties) 注册服务提供方properties:interface=接口名,class=接口的实现类


服务查找

用于查找服务,利用该接口返回对象进行服务调用,其服务发现,服务负载均衡等在服务提供方内部实现。

kd.bos.mservice.spi.rpc.MServiceLookup
方法功能 注意事项  
lookup(Class<T> type, String appId)生成接口调用的本地代理 appId为服务分组,查找对应分组为appId的服务提供方,如果rpc提供方不支持服务分组,则使用AppIdNameMapping.getAppName(appId)转换为应用名进行服务查找。


定制扩展服务RPC


    苍穹默认使用dubbo作为底层rpc框架来进行服务注册,服务发现,和服务调用。要使用定制扩展rpc,有以下步骤:

1. 实现接口

    实现上面三个接口,如实现类分别为:

    com.consume.mservice.ConsumeServiceStarter
    com.consume.mservice.ConsumeServiceLookup
    com.consume.mservice.ConsumeServiceRegister

2.将自定义RPC服务命名:

如:extendrpc

 3. 配置扩展接口

    在资源包的目录/META-INF/kd/bos/extension包下建立以接口名命名的文件,并分别配置自定义实现类。. 

     在文件 kd.bos.mservice.spi.rpc.MServiceStarter中配置:

extendrpc=com.consume.mservice.ConsumeServiceStarter


      在文件  kd.bos.mservice.spi.rpc.MServiceRegister中配置:

extendrpc=com.consume.mservice.ConsumeServiceRegister


      在文件  kd.bos.mservice.spi.rpc.MServiceRegister中配置:

extendrpc=com.consume.mservice.ConsumeServiceRegister


4. 配置使用自定义rpc

环境变量或者mc中配置属性:mservice.rpctype=extendrpc


熔断限流开放性扩展


    苍穹默认使用sentinel作为熔断限流器,用户可根据需要扩展使用自定义熔断限流器。


 接口


  •    kd.bos.mservice.spi.circuitbreaker.Circuitbreaker


    方法 
    功能  
    注意事项  
    withName(String name) 
    资源名

     withParams(Object ...args)
    参数 

    setContent(String content);
    设置content

    begin(); 
    开始 
    限流资源申请  
    call(Callable call)  
    执行
    如果不需要动作,直接调用call.call()
    end(); 
    结束  
    限流资源释放  


 使用

     标准产品已默认将熔断限流加入web action和微服务接口提供的地方,如果用户需要将熔断限流加入其它接口,将需要熔断限流的invoke放入Circuitbreaker管理中,示例如下


try (Circuitbreaker breaker = CircuitbreakerFactory.get("web-request").withName(requestURI).begin())
{
    try
    {
        breaker.call(() -> {
            try
            {
                chain.doFilter(request, response);
            } catch (IOException | ServletException e)
            {
                throw new RuntimeException(e);
              }
        });
    } catch (RuntimeException e)
    {
        Throwable ecase = e.getCause();
        if (ecase instanceof IOException)
        {
            throw (IOException) ecase;
        } else if (ecase instanceof ServletException)
        {
            throw (ServletException) ecase;
        }
            throw e;
        }
    }
}


定制扩展熔断限流

1、实现接口

kd.bos.mservice.spi.circuitbreaker.ConsumeCircuitbreaker

2、命名自定义熔断限流:

如:

consumercircuitbreaker

3、配置扩展接口

    在资源包的目录/META-INF/kd/bos/extension包下建立以接口名命名的文件,并配置自定义实现类。. 

    在文件 kd.bos.mservice.spi.circuitbreaker.Circuitbreaker中配置:

consumercircuitbreaker=kd.bos.mservice.spi.circuitbreaker.ConsumeCircuitbreaker

4、配置使用自定义熔断限流

环境变量或者mc中配置属性:

circuitbreaker.type=consumercircuitbreaker



图标赞 11
11人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!