一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

spring-cloud-starter-security的依赖库,在build.gradle中添加如下依赖配置。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

然后,在application.yml文件中添加安全的配置,代码如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

这时,有关Spring Cloud Config Server的配置就基本完成了。在服务正常启动后,即可通过Spring Cloud Config Client从git中读取配置信息了,如果此时Git仓库已经有了一些配置,那么可以通过HTTP的请求来认证是否配置成功,请求的规则如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

假设我们现在要对项目的测试环境编写配置文件,在指定的GitHub 地 址 中 的 chapter 3/config-resources 目 录 下 添加application-name-test.yml 文 件 ( 在客户端不指定spring.profile.active时会默认读取application-name.yml的配置,和本地配置文件规则一致),内容如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

然后在浏览器访问URL:

http://localhost:64949/applicationname/default(64949是因为配置了port是0而产生的随机端口号地址),如果配置了Spring Security,那么在浏览器中还需要输入用户名与密码,最后得到如下结果就证明Config Server配置成功了。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

那么,在客户端如何与配置中心集成呢?Spring Cloud Config也提供了友好的客户端支持,不需要我们写任何代码,即可像读取本地配置一样读取配置中心的配置,下面来了解一下Spring Cloud Config Client的用法。

2. Spring Cloud Config Client

首先,我们在想要集成配置中心的项目中引入Spring CloudConfig Client的依赖包“

spring-cloud-starter-config”,然后需要在本地配置注册中心的信息。build.gradle需要引入依赖包如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

因为需要先加载配置中心的信息,然后才能读取项目所需的配置信息,所以一般把Spring Cloud Config的配置写在bootstrap.yml文件中,bootstrap.yml文件的配置会先于application.yml加载。

当然,如果配置中心集成了Eureka,那么注册中心的配置也需要挪到bootstrap.yml文件中,具体的配置如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

由上面的配置信息可以看到,因为是集成的注册中心,所以不需要关心配置中心具体的服务地址和端口,只需写上相应配置中心的应用名即可。由于在服务端加了安全组件,这里还需要配置正确的用户名和密码,然后就可以像读取本地配置一样获取配置中心的配置了,具体配置如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

集成消息总线

======

在上述配置完成后,我们在微服务架构中所需的关于配置信息管理的大部分功能似乎已被满足,但项目中的场景往往没有这么简单,在有的项目中,配置信息还需要动态获取。若项目要求每次修改配置不重启服务器,则使用Spring Cloud Config应该怎么做?

一般的做法是把这些配置信息加到数据库中,通过数据库来存储和读取这些信息,只要数据库的数据发生变化,不需要重启服务器就能直接查询到最新的配置。但Spring Cloud Config使用git作为存储,这种方式可以满足动态获取配置的需求吗?答案是可以的,而且Spring Cloud Config做到的不只是可以动态获取,就连更新内存中的配置都不需要多写一行代码,在检测到配置发生变化时,Spring Cloud Config就能自动完成配置信息的更新,这是如何做到的呢?

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

Spring Cloud Config是通过集成了Spring Cloud Bus(消息总线)框架完成的这个功能,也就是说,当Spring Cloud Config的服务端检测到配置发生变化时,通过消息机制通知其他的客户端。这里不介绍Spring Cloud Bus的全部功能,只了解一下Spring Cloud Bus和Spring Cloud Config是如何配合工作的。

首先,我们知道Spring Cloud Bus并不是消息中间件,本身并不具备消息中间件的能力,只不过是集成了第三方的消息中间件,Spring Cloud Bus 提 供 了 两 个 消 息 中 间 件 的 starter 、AMQP(RabbitMQ)和Kafka。这里选择RabbitMQ作为我们的消息中间件,假设已经成功启动RabbitMQ,具体方法可以参考RabbitMQ的官网,有Docker环境的可以通过以下指令快速启动RabbitMQ。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

其次,我们在之前Spring Cloud Config的Client端中引入新的包:spring-cloud-starter bus-amqp。build.gradle中的配置如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

再次,在application.yml中添加关于RabbitMQ的配置,具体如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

最后,需要引入actuator 框架 ,提供配置刷新的入口 ,build.gradle中依赖如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

并且在application.yml中开启actuator的端点(Endpoint),内容如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

可以访问

http://localhost:port/actuator查询所有的端点,在集成消息总线后,refresh的端点地址为/actuator/bus-refresh,我们可以通过POST请求该地址主动刷新配置,通过@RefreshScope注解可以指定配置刷新的范围,具体代码如下。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架

通过控制台输出可以看出请求refresh端点会清空服务本身的配置缓存,从而使服务重新从Config Server获取最新的配置,达到刷新配置的目的。而消息总线的作用就是在一个服务有多个实例时,我们不需要去refresh每个服务实例,只需刷新其中一个实例,消息总线会自动刷新其他的实例,达到多实例同步更新的效果。

那么,如何让配置自动刷新呢?这就需要相应的代码仓库有支持Webhook的功能,如我们示例中使用的GitHub就可以配置仓库的Webhook,也可以配置相应的事件通知。例如,当有新的commit时,就发送请求给配置的地址,如/actuator/bus-refresh,从而达到自动刷新配置信息的目的。

在实现了统一配置中心的设计之后,微服务架构看起来更加完善。回想一下,现在我们的微服务拥有自动注册和发现服务的功能,并且可以通过在客户端定义负载均衡策略,灵活地选择合适的服务端实例,然后有了统一配置中心,解决海量服务配置难的问题,那么这样的架构还有其他问题吗?答案是肯定的。

一文带你吃透Spring Cloud相关微服务组件及Spring Cloud Config框架
下文将通过微服务架构中又一个重要的架构设计**“断路器”**来寻找答案。

资料免费获取方式:一键三连(点赞+转发+关注小编),扫下方二维码免费获取~

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
1uZWAc-1711867501433)]

[外链图片转存中…(img-eWtMK95L-1711867501434)]

[外链图片转存中…(img-oQDKLpTm-1711867501434)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 17
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值