Spring Cloud(六)《基于github webhook动态刷新服务配置》

Stella981
• 阅读 534

Spring Cloud(六)《基于github webhook动态刷新服务配置》

作者:付政委

自诚明,谓之性;自明诚,谓之教

微信公众号:bugstack虫洞栈
沉淀、分享、成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获。目前已完成的专题有;Netty4.x实战专题案例、用Java实现JVM、基于JavaAgent的全链路监控、手写RPC框架、架构设计专题案例[Ing]等。

前言介绍

在实际开发中经常会有一个叫做配置中心的服务,这个服务经过变更参数来动态刷新线上业务数据行为配置。比如;行为开关、活动数据、黑白名单、本地/预发/线上环境切换等等,这些配置信息往往需要在我们不重启系统的时候就可以被更新执行。那么我们一般会使用具备此类属性在分布式系统中适合的组件进行开发配置中心,像是zookeeper、redis发布订阅、或者http定时轮许拉取,他们都可以做成统一配置中心服务。而在Spring Cloud Config 中,默认采用 Git 来存储配置信息,所以使用 Spring Cloud Config 构建的配置服务器,天然就支持对微服务应用配置信息的版本管理,在加上Github的Webhook钩子服务,可以在我们push等行为操作的时候,自动执行我们的http行为,以达到自动刷新配置服务。

环境准备

  1. jdk 1.8、idea2018、Maven3

  2. Spring Boot 2.0.6.RELEASE

  3. Spring Cloud Finchley.SR2

  4. 需要有一个Git帐号,用来创建配置中心以及开启Webhooks服务,添加回调

案例说明

通过在个人Git创建配置服务工程,开启Webhooks服务添加回调钩子http://xxx:port/actuator/refresh在更新配置后自动刷新服务配置内容,如图;

Spring Cloud(六)《基于github webhook动态刷新服务配置》

微信公众号:bugstack虫洞栈 & Git配置中心Webhooks刷新服务配置

代码示例

 1itstack-demo-springcloud-06 2├── itstack-demo-springcloud-config-client 3│   └── src 4│       └── main 5│           ├── java 6│           │   └── org.itstack.demo 7│           │        ├── web 8│           │        │   └── ConfigClientController.java       9│           │        └── ConfigClientApplication.java10│           └── resources   11│               ├── application.yml12│               └── bootstrap.yml13└── itstack-demo-springcloud-config-server14    └── src15        └── main16            ├── java17            │   └── org.itstack.demo   18            │        └── ConfigServerApplication.java19            └── resources   20                └── application.yml

完整代码欢迎关注公众号:bugstack虫洞栈 回复“SpringCloud专题”进行下载

itstack-demo-springcloud-config-client | 配置获取客户端方,提供自动刷新Http

web/ConfigClientController.java & 添加注解@RefreshScope自动刷新配置

 1/** 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例 3 * 论坛:http://bugstack.cn 4 * Create by 付政委 on @2019 5 */ 6@RestController 7@RefreshScope 8public class ConfigClientController { 910    @Value("${info.profile:error}")11    private String profile;1213    @GetMapping("/config")14    public Mono<String> config() {15        return Mono.justOrEmpty(profile);16    }1718}

1

ConfigClientApplication.java & 普通配置即可

 1/** 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例 3 * 论坛:http://bugstack.cn 4 * Create by 付政委 on @2019 5 */ 6@SpringBootApplication 7public class ConfigClientApplication { 8 9    public static void main(String[] args) {10        SpringApplication.run(ConfigClientApplication.class, args);11    }1213}

application.yml & 需要配置endpoints,这样才可以暴漏刷新服务

 1spring: 2  application: 3    name: itstack-demo-springcloud-config-client 4server: 5  port: 9001 6 7# /actuator/refresh 这个 Endpoint 暴露出来 8management: 9  endpoints:10    web:11      exposure:12        include: refresh

bootstrap.yml & 配置中心服务配置,http://localhost:7397

 1spring: 2  cloud: 3    config: 4      uri: http://localhost:7397  # 配置中心的具体地址;itstack-demo-springcloud-config-server 5      name: config-client         # 对应 {application} 部分,例如;config-client-dev = 只取最后一个符号'-'之前的 6      profile: dev                # 对应 {profile} 部分 7      label: master               # 对应 {label} 部分,即 Git 的分支。如果配置中心使用的是本地存储,则该参数无用 8 9#配置文件会被转换成 Web,访问规则如下;10#/{application}/{profile}[/{label}]11#/{application}-{profile}.yml12#/{label}/{application}-{profile}.yml13#/{application}-{profile}.properties14#/{label}/{application}-{profile}.properties

itstack-demo-springcloud-config-server | 配置提供服务端方,链接Git配置工程地址

ConfigServerApplication.java & 添加注解@EnableConfigServer设置成配置服务中心

 1/** 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例 3 * 论坛:http://bugstack.cn 4 * Create by 付政委 on @2019 5 */ 6@SpringBootApplication 7@EnableConfigServer 8public class ConfigServerApplication { 910    public static void main(String[] args) {11        SpringApplication.run(ConfigServerApplication.class, args);12    }1314}

application.yml &

 1server: 2  port: 7397 3 4spring: 5  application: 6    name: itstack-demo-springcloud-config 7  cloud: 8    config: 9      server:10        git:11          uri: https://github.com/fuzhengwei/itstack-demo-config  # 换成自己的配置Git仓库的地址,如果没有可以新建工程地址,也可以克隆我的12          search-paths: config-repo                               # Git仓库地址下的底层配置文件名称,如果配置多个用逗号','分割。1314# 如果配置中心需要访问权限,则开启配置15# spring.cloud.config.server.git.username:Github账户16# spring.cloud.config.server.git.password:Github密码

测试验证

  1. 准备好自己Github的配置仓库,也可以克隆我的Git;https://github.com/fuzhengwei/itstack-demo-config {有一组配置配置文件}

  2. 配置Webhooks,在https://github.com/换你自己的fuzhengwei/换你自己的itstack-demo-netty/settings/hooks/new

  3. 分别启动服务

  4. itstack-demo-springcloud-config-server 配置Server

  5. itstack-demo-springcloud-config-client 配置Client

  6. 访问配置服务,端口7397;http://localhost:7397/config-client/dev

     1{ 2    "name": "config-client", 3    "profiles": [ 4        "dev" 5    ], 6    "label": null, 7    "version": "ea0b1a1017595d542aa01b8b2bda68f9620dd81a", 8    "state": null, 9    "propertySources": [10        {11            "name": "https://github.com/fuzhengwei/spring-cloud-study/config-repo/config-client-dev.yml",12            "source": {13                "info.profile": "dev bus"14            }15        }16    ]17}
    
    1info:2    profile: dev bus
    
  • /{application}/{profile}[/{label}]

  • /{application}-{profile}.yml

  • /{label}/{application}-{profile}.yml

  • /{application}-{profile}.properties

  • /{label}/{application}-{profile}.properties

  1. 访问配置文件;http://localhost:8080/config-client-dev.yml {可以直接访问查看配置信息}

  2. 访问规则{配置文件会被转换成 Web 接口,规则如下}

  3. 访问结果

  4. 访问使用配置的客户端,端口9001;http://localhost:9001/config {可以提交配置代码反复刷新测试}

    1dev bus

综上总结

  1. Spring Cloud Config 可以很方便的依赖于Github提供的回调钩子进行更新配置,同时也支持本地配置

  2. Webhooks 不止可以用于变更配置,还可以用于一起启动触发工程打包部署发布的行为

  3. 不要局限于知识点,往往每一个新知识所带来的架构设计更值得学习,这些都可以灵活的用于项目系统中


Spring Cloud(六)《基于github webhook动态刷新服务配置》

微信公众号:bugstack虫洞栈,欢迎关注&获取源码

本文分享自微信公众号 - bugstack虫洞栈(bugstack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
小傅哥 小傅哥
3年前
半年招聘筛选了400+份简历,告诉你怎么写容易被撩!
作者:小傅哥博客:https://bugstack.cn(https://bugstack.cn)沉淀、分享、成长,让自己和他人都能有所收获!😄
小傅哥 小傅哥
3年前
一次代码评审,差点过不了试用期!
作者:小傅哥博客:https://bugstack.cn(https://bugstack.cn)沉淀、分享、成长,让自己和他人都能有所收获!😄一
小傅哥 小傅哥
3年前
设计模式PDF下载了4.0万本!那,再肝一本《Java面经手册》吧!
作者:小傅哥博客:https://bugstack.cn(https://bugstack.cn)沉淀、分享、成长,让自己和他人都能有所收获!😄一
小傅哥 小傅哥
3年前
握草,你竟然在代码里下毒!
作者:小傅哥博客:https://bugstack.cn(https://bugstack.cn)沉淀、分享、成长,让自己和他人都能有所收获!😄
Stella981 Stella981
2年前
DDD专题案例三《领域驱动设计架构基于SpringCloud搭建微服务》
!(https://oscimg.oschina.net/oscnet/ea8c4fbbc514341be35cc89aa9874e02209.jpg)作者:付政委成长总是来自于对未知领域的探索| 库布齐50公里穿行微信公众号:bugstack虫洞栈|关注获取源码沉淀、分享、成长,专注于原创专题案例,以最易学习编程的方式分
Wesley13 Wesley13
2年前
DDD专题案例一《初识领域驱动设计DDD落地方案》
!(https://oscimg.oschina.net/oscnet/4a995087a8cd98f4316a260f4555e36a503.jpg)作者:付政委纳百川、吞吐、成自卧龙,笑红尘、纷繁、当乃胸容微信公众号:bugstack虫洞栈领取驱动设计DDD{DomainDrivenDesign}历史较长但随着微服务
可莉 可莉
2年前
20年3月27日,Github被攻击。我的GitPage博客也挂了,紧急修复之路,也教会你搭建 Jekyll 博客!
!(https://oscimg.oschina.net/oscnet/14ef929224e43ba1302bb7ce55cdd3559ea.jpg)作者:小傅哥小心驶得万年船,不小心也能万年传!小傅哥| https://bugstack.cn沉淀、分享、成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他
Stella981 Stella981
2年前
Spring Cloud(七)《基于RabbitMQ消息总线方式刷新配置服务》
!(https://oscimg.oschina.net/oscnet/2bcf28bf1419a03a3e9ecd562c8fc5dbcd5.jpg)作者:付政委读书不觉已春深,一寸光阴一寸金。不是道人来引笑,周情孔思正追寻。微信公众号:bugstack虫洞栈沉淀、分享、成长,专注于原创专题案例,以最易学习编程的方式分享知识
Stella981 Stella981
2年前
Spring Boot 中间件开发(一)《服务治理中间件之统一白名单验证》
!(https://oscimg.oschina.net/oscnet/bba4096e417a5017a23f5fe30c7c1307c40.jpg)作者:小付哥常恐秋节至,焜黄华叶衰微信公众号:bugstack虫洞栈沉淀、分享、成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获。目前已完成的专题