SpringCloud基础教程(五)-配置中心热生效和高可用

标签: springcloud 基础 中心 | 发表时间:2020-01-29 15:15 | 作者:_兰陵笑笑生
出处:https://juejin.im/welcome/backend

 我的博客: 兰陵笑笑生,欢迎浏览博客!

 上一章 SpringCloud基础教程(四)-配置中心入门当中,我们在对Eureka的有了基本的基础认识之上,深入的了解Eureka高可用集群和其他的生产环境中用到的一些配置。本章将开始了解分布式环境下的配置中心。

前言

 在实际的项目运行中,我们会根据实际需求修改配置内容,那么有没有一种方式,能够在不启动服务组件的情况向让配置文件动态的生效呢,Spring Cloud Conifg中提供了一种方式了。当然我们还需要考虑一旦配置服务宕机的话,那么配置客户端是无法获取到配置信息的,所以针对配置服务,我们也希望能提供高可用的服务。

一、配置热生效

 首先我们在客户端(每个开发的微服务)的控制器上添加 @RefreshScope 注解,并在客户端(项目的pom.xml中引入actuator依赖(actuator中包含了/actuator/refresh的api):

  @RefreshScope
@RestController
public class ValueController {

    @Value("${k1}")
     String value;

    @GetMapping("/get")
    public String getValue(){
        return value;
    }
}复制代码

亲自测试,如果将@RefreshScope注解添加在启动类上,value是不管用的,只有添加在需要热加载的Bean上才生效。

      
            org.springframework.boot
            spring-boot-starter-actuator
    复制代码

 修改bootstrap.xml 添加如下配置,表示可以通过手动的刷新改变获取配置信息

  management:
  endpoints:
    enabled-by-default: true
    web:
      exposure:
        include: refresh复制代码

 在配置完成之后,我们通过以下的步骤测试热生效:

步骤一:启动Config Server和Config Client项目访问。

步骤二:访问http://localhost:9003/get 返回的结果是 “master-test-v1 ”;

步骤三:修改配置文件ConfigServer-test.properties 内容修改成”k1=master-test-v2“;提交到git仓库

步骤四:访问http://localhost:9003/get 返回的结果依旧是 “master-test-v1 ”;

步骤五:通过POST访问http://localhost:g003/actuator/refresh 访问得到响应【“k1”】, 注意这里的版本是2.x系列的springCloud,和1.X系列的接口访问不一样):

file

第六步:再次去访问http://localhost:9003/get 返回的结果变成了是 “master-test-v2 ”;

 通过以上的配置,我们成功的测试了手动的请求可以刷新并动态的加载最新的配置,当然这样还是存在一个缺点,就是需要手动刷新。当然SpringCloud中介绍了使用Bus来通知Spring Cloud Config,后期的文章还需继续生如介绍。

二、高可用

 在上文中,我们的配置的客户端都是通过制定配置Config Server的实例地址方式获取配置信息的,一旦Config Server遇到故障,获取配置信息就会出现故障,SpringCloud同样支持通过高可用的方式解决这样的问题。接下来我们结合Eureka组件,来搭建高可用的配置中心。

2.1 Config Server配置

 在Config Server的项目中添加Eureka的依赖:

         
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        复制代码

 并在ConfigServerApplicaition.Java启动类添加注解@EnableEurekaClient 开启Eureka注册:

  import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigServerApplicaition {
    
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplicaition.class, args);
    }
}
复制代码

 修改Config Server的applicaiton.xml配置:修改端口号和实例Id,启动2个Config Server实例:

  server:
  port: 6001
#服务提供方
spring:
  application:
  #服务的名称
    name: server-config-cluster
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/lnxxs/springCloudConfig.git
          password:
          username:
          #git非植
      label: master
      uri: http://localhost:6001/
      enabled: true
      #http安全
  security:
    user:
      name: user
      password: pwd
      #注册的实实例
eureka:
  instance:
    instance-id: config-server1
  client:
    service-url:
    #连接eureka的url
      defaultZone:  http://eureka7001.com:7001/eureka/复制代码

 在Eureka的监控中心,我们看到了名称为server-config-cluster的实例有2个,分别是config-server1和

config-server2:

file

2.2、客户端配置

 客户端需要从Eureka获取Config Server的地址,首先在客户端的项目pom.xml中添加Eureka的依赖:

          
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        复制代码

 启动类添加@EnableDiscoveryClient注解,启动开发服务发现的功能,发现Config Server配置服务信息:

  import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableAutoConfiguration
@EnableDiscoveryClient
public class ConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}复制代码

 同时在bootstrap.xml洗澡呢Eureka注册中心的地址配置,同时将spring.cloud.config.uri去掉,打开spring.cloud.config.discover.enabled=ture ,并添加spring.cloud.config.service-id为配置服务的spring.application.name= server-config-cluster,具体配置如下:

  spring:
  application:
    name: server-client
  cloud:
    config:
        label: master
        profile: test
        #修改uri为 discovery.service-id
        #uri: http://localhost:6001/
        name: ConfigServer
        fail-fast: true
        retry:
          initial-interval: 1000
          max-attempts: 6
          max-interval: 2000
          multiplier: 1.1
        username: user
        password: pwd
        discovery:
          service-id: server-config-cluster
          enabled: true
management:
  endpoints:
    enabled-by-default: true
    web:
      exposure:
        include: refresh
eureka:
  instance:
    instance-id: config-client
  client:
    service-url:
    #连接eureka的url
      defaultZone:  http://eureka7001.com:7001/eureka/复制代码

 通过以上的配置,就可以实现配置中心的高可用。

三、总结

 本章是对配置中心做了深入的介绍,包括配置的热加载和配置服务的高可用,这些都是微服务架构所需要的。Spring Cloud Config功能特别的丰富,不止于此,同时还支持更换git仓库为SVN或者其他的仓库等,有感兴趣的同学可以自行研究。

file

.以就是本期的分享,你还可以关注公众号: 程序员笑笑生,关注更多精彩内容!

file

file

SpringCloud基础教程(一)-微服务与SpringCloud

SpringCloud基础教程(二)-服务发现 Eureka

SpringCloud基础教程(三)-Eureka进阶

SpringCloud 基础教程(四)-配置中心入门

SpringCloud基础教程(五)-配置中心热生效和高可用

SpringCloud 基础教程(六)-负载均衡Ribbon

更多精彩内容,请期待...

本文由博客一文多发平台 OpenWrite 发布!

相关 [springcloud 基础 中心] 推荐:

SpringCloud基础教程(五)-配置中心热生效和高可用

- - 掘金后端
 我的博客: 兰陵笑笑生,欢迎浏览博客.  上一章 SpringCloud基础教程(四)-配置中心入门当中,我们在对Eureka的有了基本的基础认识之上,深入的了解Eureka高可用集群和其他的生产环境中用到的一些配置. 本章将开始了解分布式环境下的配置中心.  在实际的项目运行中,我们会根据实际需求修改配置内容,那么有没有一种方式,能够在不启动服务组件的情况向让配置文件动态的生效呢,Spring Cloud Conifg中提供了一种方式了.

基于springcloud实现的灰度发布

- -
基于springcloud实现的灰度发布. gray-config-server 配置中心. 端口:6007,方便起见直接读取配置文件,生产环境可以读取git. 先启动配置中心,所有服务的配置(包括注册中心的地址)均从配置中心读取. gray-xxx-service 服务消费者. 调用服务提供者和服务提供者,验证是否进入灰度服务.

SpringCloud项目接入Jaeger(下) - 掘金

- -
spring-cloud-sleuth这个组件时,会面临两个问题. 首先是日志中无法显示traceId和spanId这些链路信息,其次是不能在用. spring-cloud-sleuth所提供的方式进行链路传值. spring-cloud-sleuth是将traceId等链路信息保存在. slf4j的MDC(Mapped Diagnostic Contexts)中,然后通过%X{traceId}这种方式将traceId提取出来,比如打印到控制台的默认格式是:.

Springcloud + RocketMQ 解决分布式事务

- - 掘金架构
分布式事务有哪些实现方式. 随着互联网时代的高速发展,分布式成了大型系统的标配,这是时代发展的选择. 大型分布式系统不是每个公司和开发人员都能够涉及的领域,因为大型系统后面都 隐藏着众多代名词:复杂,昂贵,高科技,人才云集,大战略. 大部分领头互联网公司甚至依托自己的分布式经验逐步建立自己的体系,并使用这套体系搭建自己的平台对内,甚至对外提供服务, 就像现在众多的云平台提供的服务,甚至有些大战略提出促进发展:大中台小前台、大炮台支援单兵作战等等.

SpringCloud灰度发布实践(附源码) - 微服务实践 - SegmentFault 思否

- -
在平时的业务开发过程中,后端服务与服务之间的调用往往通过. resttemplate两种方式. 但是我们在调用服务的时候往往只需要写服务名就可以做到路由到具体的服务,这其中的原理相比大家都知道是. ribbon组件帮我们做了负载均衡的功能. 灰度的核心就是路由,如果我们能够重写ribbon默认的负载均衡算法是不是就意味着我们能够控制服务的转发呢.

微服务SpringCloud之GateWay熔断、限流、重试 - 社会主义接班人 - 博客园

- -
纯洁的微笑的Spring Cloud系列博客终于学完了,也对Spring Cloud有了初步的了解. StripPrefix Filter 是一个请求路径截取的功能,我们可以利用这个功能来做特殊业务的转发. StripPrefix是当请求路径匹配到/name/**会将包含name和后边的字符串接去掉转发, StripPrefix=2就代表截取路径的个数,当访问.

[酷工作] [美团点评基础研发平台-前端技术中心招聘] 高级前端工程师

- - V2EX
根据产品设计需求,配合后台开发人员实现业务页面,维护及优化前端页面性能;. 学习前沿前端技术并进行实践和分享,参与制定前端开发规范并推进执行;. 熟练使用各种 Web 前端技术,包括但不限于 HTML(5)/CSS(3)/JavaScript(ES6+),熟悉前端开发规范和 W3C 标准;. 熟悉 Vue 或 React 等 MV * 框架技术栈,至少掌握一种前端项目构建工具;.

HTTP基础

- - ITeye博客
HTTP的结构主要包括下面几个要点:. HTTP的版本主要有1.0,1.1 和更高版本.    1.1 及以上版本允许在一个TCP连接上传送多个HTTP协议,1.0能 .    1.1 及以上版本多个请求和响应可以重叠,1.0不能.    1.1 增加了很多的请求头和响应头.     一个请求行,若干小心头,以及实体内容,其中的一些消息头和实体内容是可选的,消息头和实体内容需要空行隔开.

Git基础

- Wolf - 潘魏增
上个月末在公司内部作了一次《Git基础》的主题分享. 这里把分享内容公布出来,希望对一些朋友有用. 如果之前没有接触过Git,wikipedia上面已经有非常好的介绍. pdf格式:http://panweizeng.com/download/git-basics-meituan.pdf. keynote格式:http://panweizeng.com/download/git-basics-meituan.key.

JavaScript 基础

- - CSDN博客推荐文章
JavaScript可以出现在HTML的任意地方,甚至在之前插入也不成问题,使用标签. 不过要在框架网页中插入的话,就一定要在之前插入,否则不会运行. JavaScript对数据类型要求不严格,一般来说,声明变量的时候不需要声明类型,而且就算声明了类型,在使用过程中也可以给变量赋予其他类型的值,声明变量使用var关键字.