最全使用Spring Cloud Config进行分布式配置:自动重新加载配置,太牛了

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

port: ${PORT:8081}

management:

security:

enabled: false

sample:

string:

property: Client ApP

int:

property:1

开发人员可以通过将management.security.enabled 设置为false 来禁用Spring Boot Actuator端点的安全性,这是在不传递安全凭证的情况下调用这些端点所必需的。此外还需要添加sample. string property和sample.int.property两个测试参数,以根据示例中的值来演示bean刷新机制。Spring Cloud为Spring Boot Actuator提供了一些额外的HTTP管理端点。其中一个是/refresh, 它负责重新加载Bootstrap上下文和使用@RefreshScope注解的刷新bean。这是一个HTTP POST方法,可以在客户端实例( htp://ocahost:808 1/refresh)上调用。在测试该功能之前,开发人员需要运行发现和配置服务器。应使用–springprofiles.active-zonel参数启动客户端应用程序。在以下类中,可以将测试属性sample.string.property和sample intproperty注入字段中。

@Component

@RefreshScope

public class ClientConfiguration {

@Value (“’ {sample.string .property)”)

private String sampleStringProperty;

@Value (“${sample. int.property}”)

private int sampleIntProperty;

public String showProperties() {

return String. format(“Hello from 8号d”, sampleStringProperty,

sampleIntProperty);

}

}

该bean被注入ClientController 类并在ping方法中调用,该方法在ht:/ocalhosth8081/ping位置处公开。

@RestController

public class ClientController {

CAutowi red

private ClientConfiguration conf;

@GetMapping (“/ping”)

public String ping() {

return conf. showProperties() ;

}

}

现在,开发人员可以改变client-service zonel.yml中测试属性的值并提交它们。如果调用Config Server HTTP端点/client-service/zone1,则将看到作为响应返回的最新值。但是,当调用客户端应用程序上公开的/ping方法时,开发人员仍会在如图5.6所示的屏幕截图的左侧看到较旧的值。为什么?其实这也很好理解,虽然Config Server 会自动检测存储库更改,但是客户端应用程序无法在没有任何触发器的情况下自动刷新。它需要重新启动才能读取最新设置,或者开发人员也可以通过调用之前所描述的/refresh方法来强制重新加载配置。

使用Spring Cloud Config进行分布式配置:自动重新加载配置

在客户端应用程序上调用/efresh端点后,开发人员将在日志文件中看到已经重新加载配置。现在,如果再次调用/ping,则会在响应中返回最新的属性值,如图5.7所示。该示例说明了热重载如何适用于Spring Cloud 应用程序,但它显然不是我们的目标解决方案。我们的下一步是启用与消息代理的通信。

使用Spring Cloud Config进行分布式配置:自动重新加载配置

使用来自消息代理的事件

===========

前文已经提到过,开发人员可以选择两个与Spring Cloud Bus 集成的消息代理(Message Broker) 。在本示例中,将演示如何运行和使用RabbitMQ。关于这个解决方案有必要多做一些介绍,因为这是在本书中第一次处理它。RabbitMQ 已经发展成为最受欢迎的消息代理软件。它是用Erlang编写的,并且实现了高级消息队列协议(Advanced Message Queueing Protocol, AMQP)。它易于使用和配置,即使对于我们正在讨论的集群或高可用性等机制来说也不例外。

使用Spring Cloud Config进行分布式配置:自动重新加载配置

要在开发人员的机器.上运行RabbitMQ,最简便的方法是通过Docker容器。该容器已经公开了两个端口。第一个端口用于客户端连接(5672),第二个端口用于管理仪表板(15672)。此外,我们还使用了management标记来运行镜像(Image),以启用用户界面仪表板,这在默认版本中是不可用的。

docker run -d --name rabbit -P 5672:5672 -P 15672:15672 rabbi tmq:management

要为我们的示例客户端应用程序启用对于RabbitMQ 代理的支持,应该在pom.xml中包含以下依赖项。

org . springframework. cloud

spring-cloud-starter -bus- amqp

</ dependency>

该库包含自动配置设置。因为我们是在Windows系统上运行Docker,所以需要覆盖一些默认属性。 完整的服务配置存储在Git存储库中,因而更改仅影响远程文件。开发人员应该将以下参数添加到以前使用的客户端属性源版本中。该库包含自动配置设置。因为我们是在Windows系统上运行Docker,所以需要覆盖一些默认属性。完整的服务配置存储在Git存储库中,因而更改仅影响远程文件。开发人员应该将以下参数添加到以前使用的客户端属性源版本中。

spring:

rabbi tmq:

host: 192.168.99.100

port: 5672

username: guest

password: guest

此时如果运行该客户端应用程序,则将在RabbitMQ中自动创建交换消息和队列。开发人员可以登录htp://92/./ 168.99.100:15672.上的管理仪表板轻松查看。默认用户名和密码是guest/guest.如图5.8所示是笔者的RabbitMQ实例的屏幕截图,可以看到已经创建了一个名为springCloudBus的交换消息(Exchange),有两个绑定到客户端队列和Config Server队列(笔者已经使用更改运行它,详见第5.7.4 节中的说明)。在目前这个阶段,开发人员还不必着急深入了解RabbitMQ及其架构,在本书第11章“消息驱动的微服务”有关SpringCloudStream项目的讨论中将会对此做更详细的说明。

使用Spring Cloud Config进行分布式配置:自动重新加载配置

监视Config Server,上的存储库更改

=======================

Spring Cloud Config Server必须在前面描述的过程中执行两项任务。首先,它必须检测存储在Git存储库中的property文件中的更改。这可以通过公开特殊端点来实现,该端点将由存储库提供商通过WebHook调用。第二个步骤是准备并发送–个针对可能已更改的应用程序的

RefreshRemotcApplicationEvent 事件,这反过来又要求开发人员与消息代理建立连接。spring-cloud-config-monitor 库负责启用/monitor端点。要启用对RabbitMQ代理的支持,应该包含与客户端应用程序相同的启动工件。

org. springframework. cloud

spring-cloud-config-monitor</arti factId>

</ dependency>

org.springframework.cloud

spring-cloud-starter -bus- amqp

</ dependency>

这还不是全部。开发人员还应在application.yml 中激活配置监控程序(Monitor) 。由于每个存储库提供商都在SpringCloud中具有专用实现,因而有必要选择应该启用哪一个存储库提供商。

spring:

application:

name: config- server

cloud:

config :

server :

monitor :

github :

enabled:: true

开发人员可以自定义更改检测机制。默认情况下,它会检测与应用程序名称匹配的文件中的更改。要覆盖该行为,需要提供

PropertyPathNotificationExtractor的自定义实现。它接受请求头和正文参数,并返回已更改的文件路径列表。为了支持来自GitHub的通知,可以使用spring-cloud- config-monitor提供的GithubPropertyPathNotifcationExtractor.

@Bean

publit Gi thubPropertyPathNoti ficationExtractor

gi thubPropertyPathNotificationExtractor() {

return new Gi thubPropertyPathNotificationExtractor();

}

1.手动模拟更改事件

monitor端点可以由Git存储库提供商( 如GitHub、Bitbucket 或GitLab). 上配置的WebHook调用。使用在localhost. 上运行的应用程序测试此类功能很麻烦。事实证明,开发人员可以通过手动调用POST /monitor来轻松模拟这样的WebHook激活。例如,Github命令应该在请求中包含标头X -Github-Event.具有property文件更改的JSON正文应该如以下cURL请求中所示。

$ curl -H “X-Gi thub-Event: push” -H “Content -Type: application/json” -X

POST -d ’ {“commits”: [ { “modified”: [“client-service- zone1。yml”]}]}’

最后

关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。当然,这些内容我也全部整理在一份pdf文档内,分成了以下几大专题:

  • Java基础部分

  • 算法与编程

  • 数据库部分

  • 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)

这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。

作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。

作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值