18、Spring Cloud18——配置中心服务化

本文介绍了如何将Spring Cloud的配置中心服务化,通过引入Eureka实现Config Server和Config Client的动态注册与发现。详细步骤包括在各个组件中添加依赖、配置文件的设置,以及讨论了配置中心的重试机制、配置的动态刷新等关键点。
摘要由CSDN通过智能技术生成

什么是配置中心服务化?

我们前两篇讲的分布式配置中心,实际上并没有引入eureka,这样是不合理的,相当于config-client里面把config-server的地址写死了,config-server如果以后换了地址,所有的config-client都得改,而且这个config-server如果你想要部署集群也不好处理,所以为了解决这个问题还是引入eureka。

首先启动eureka,然后让config-server和config-client都注册到eureka上面去,先在config-server和config-client中分别加入如下依赖

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

在config-server的application.properties配置文件中加入如下配置;

eureka.client.service-url.defaultZone=http://localhost:1111/eureka/

到这里,我们的config-server的配置就成功了。

修改config-client
在config-client的配置文件bootstrap.properties中加上如下代码

eureka.client.service-url.defaultZone=http://localhost:1111/eureka/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=config-server

在这里插入图片描述启动项目访问config-client中的hello接口,发现能成功访问,说明配置成功:
在这里插入图片描述
这就是服务化,引入eureka,正常都是这样来做的,不会直接让config-client和config-server相连。

配置中心细节
不做任何额外配置的情况下,失败响应有点迟钝,举个简单的例子,关掉config-server,我们直接启动config-client,此时启动会报错,但是报错时间较晚,报错的时候系统已经打印了许多启动日志了,如果我们希望在启动失败的时候能够快速响应,方法很简单,在config-client的配置文件中添加如下配置即可:

#失败快速响应
spring.cloud.config.fail-fast=true

此时不启动config-server直接启动config-client依然会报错,但是我们看到报错时间较早,系统都没打印几条启动日志。

那么为什么要配置这个失败快速响应呢?实际上是为了重试机制:

重试机制
如果由于网络不稳定等原因导致config-client在启动时访问config-server没有访问成功从而报错,这显然是不划算的,遇到这种情况我们希望config-client最好能重试几次,添加重试机制的方法很简单,只需要引入如下依赖到config-client的pom.xml文件中即可,无需在做任何额外配置:

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

这样当它访问config-server访问失败,它会自动的重试,我们现在再次尝试不启动config-server,然后启动config-client得到如下日志,我们发现config-client一共尝试去访问config-server,六次都没成功才抛出异常:
在这里插入图片描述注意:如果要启用这个重试机制,那就必须开启失败快速响应。

那么重试机制也可以自己在配置文件中配置相关的参数:

# 配置重试次数,默认为6
spring.cloud.config.retry.max-attempts=6
# 间隔乘数,默认1.1
spring.cloud.config.retry.multiplier=2
# 初始重试间隔时间,默认1000ms
spring.cloud.config.retry.initial-interval=1000
# 最大间隔时间,默认2000ms
spring.cloud.config.retry.max-interval=2000

动态刷新配置
我们知道当GitHub中的配置文件更新后,config-server能够即时感知到,可是config-client不能即时感知到,必须要重启才行,那么如果我们希望config-client也能即时感知到,那我们该怎么做呢?方法很简单,首先在config-client中加入如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

该依赖中包含了/actuator/refresh端口的实现,我们将利用这个端口来刷新配置信息。在config-client的配置文件中加上如下配置:

#允许/actuator/refresh这个端口
management.endpoints.web.exposure.include=refresh

当然这个不是主流方案,这样的话如果以后配置文件改了,还得挨个的去调用这个接口才能更新,后面还有其他办法来简化这个操作,后面再来学习。

测试:修改test环境,这里在后面加了123,如下:
在这里插入图片描述然后提交到GitHub上去:
在这里插入图片描述此时在config-client没有重启的情况下,怎么刷新都不会更新,还是原理的数据,config-client检测不到GitHub中配置文件的变化。

然后我们通过postman发送一个post请求,请求地址是
在这里插入图片描述这时候再次刷新,我们可以看到,config-client中的数据已经更新啦:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值