简介
苍穹开放性扩展,通过配置开放性扩展接口,用户可以使用自定义的服务注册查找,服务限流熔断等。
服务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
推荐阅读