Sermant源码(二)如何无侵入接入配置中心

前言

本章基于Sermant2.0.0,分析dynamic-config插件为springboot宿主应用无侵入接入配置中心。
过程中涉及Sermant的两个核心通用能力(core):
1. Sermant自身如何接入配置中心:Sermant自身有众多插件需要动态配置能力,比如流控、负载均衡,不仅仅是dynamic-config插件为宿主提供动态配置;
2. 如何将插件类注入springboot环境:Sermant能够将插件中的类,放入spring.factories,并被springboot加载使用;
注:本篇配置中心采用Naocs(2.x)。

一、使用

1、客户端

使用Sermant-examples官方案例中的spring-provider模块。

pom

无需引入任何三方依赖,只需要是一个springboot项目。

 

xml

代码解读

复制代码

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring.boot.version}</version> </dependency> </dependencies>

用户代码

  1. 使用Value/ConfigurationProperties注解注入配置;
    2. 使用RefreshScope标记需要刷新配置的类;
 

less

代码解读

复制代码

@Controller @ResponseBody @RefreshScope public class FlowController { @Value("${server.port}") int port; @Value("${sermant}") private String sermant; @RequestMapping(value = "/flow", method = RequestMethod.GET) public String flow(@RequestParam(required = false) Integer exRate, HttpServletRequest request) throws Exception { return "Hello, I am zk rest template provider, my port is " + port + ", sermant value is " + sermant; } }

agent配置

agent/config.properties:
开启动态配置,使用nacos配置中心,设置service.meta.project=sermant,这将来是nacos的namespaceId
注:可以通过环境变量或-D参数设置。

 

ini

代码解读

复制代码

agent.service.dynamic.config.enable=true dynamic.config.serverAddress=127.0.0.1:8848 dynamic.config.dynamicConfigType=NACOS service.meta.project=sermant

插件配置

agent/plugins.yaml:加入dynamic-config

 

arduino

代码解读

复制代码

plugins: - dynamic-config

agent/pluginPackage/dynamic-config/config/config.yaml:
1. enableCseAdapter:关闭,是否适配华为云CSE;
2. enableDynamicConfig:开启,是否开启动态配置;
3. enableOriginConfigCenter:关闭,是否应用自己接入配置中心(如应用自己引入nacos配置中心spring.cloud.nacos.config.enabled=true);

 

yaml

代码解读

复制代码

dynamic.config.plugin: enableCseAdapter: false enableDynamicConfig: true enableOriginConfigCenter: false

挂载agent

 

diff

代码解读

复制代码

java -Dspring.application.name=spring-flow-provider -javaagent:/path/to/sermant-agent/agent/sermant-agent.jar -jar spring-provider.jar

2、服务端(sermant-backend)

application.properties:开启动态配置,使用nacos。

 

ini

代码解读

复制代码

dynamic.config.enable=true dynamic.config.serverAddress=127.0.0.1:8848 dynamic.config.dynamicConfigType=NACOS

3、使用控制台修改配置

插件类型:其他;
project:sermant,对应agent侧service.meta.project,对应nacos侧namespaceId;
group:格式service=服务名,对应应用侧dubbo.application.name或spring.application.name,对应nacos侧group;
key:任意值,动态配置插件都能读到,对应nacos侧dataId;
配置内容:仅支持yaml格式配置文件;

可以去Nacos看到配置变更。

验证配置生效:

 

csharp

代码解读

复制代码

curl localhost:8003/flow Hello, I am zk rest template provider, my port is 8003, sermant value is 配置值

二、sermant如何接入配置中心

sermant在core模块中定义动态配置服务入,在implement模块中实现,不同的plugin可以选择性使用:
1. dynamic-config:宿主配置中心插件,让宿主springboot应用通过Value和ConfigurationProperties注入配置中心配置;
2. flowcontrol:流控插件,获取流控规则配置;
3. loadbalancer:负载均衡插件,获取负载均衡规则配置;
4. tag-transmission:流量标签透传插件,获取标签透传配置;
...

1、 DynamicConfigService

DynamicConfigService是core中定义的BaseService SPI接口。

image.png


DynamicConfigService是一个常规的配置中心抽象类,可以对配置进行增删改查和订阅。
DynamicConfigService查询配置:
注:如果group为空,fixGroup会将group设置为dynamic.config.defaultGroup,默认为sermant

 

typescript

代码解读

复制代码

@Override public String getConfig(String key) { return getConfig(key, null); } @Override public String getConfig(String key, String group) { return doGetConfig(key, fixGroup(group)).orElse(null); }

DynamicConfigService订阅配置有两种方式:
1. 组订阅:批量订阅一个group下的所有配置

 

typescript

代码解读

复制代码

@Override public boolean addGroupListener(String group, DynamicConfigListener listener) { if (listener == null) { LOGGER.warning("Empty listener is not allowed. "); return false; } return doAddGroup

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值