使用SpringCloudConfig进行分布式配置:构建服务器端应用程序
Posted jinggege795
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SpringCloudConfig进行分布式配置:构建服务器端应用程序相关的知识,希望对你有一定的参考价值。
构建服务器端应用程序
在前一篇文章中已经讨论了HTTP API ( 一种由Spring Cloud Config Server 提供的基于资源的API) ,以及通过它创建和存储属性的方法。现在我们需要回归到基础方法。与发现服务器相同,Config Server可以作为Spring Boot应用程序运行。要在服务器端启用它,应该在pom.xml文件的依赖项中包含spring cloud-config-server.
<dependency>
<groupId>org. springf ramework.cloud</ groupId>
<artifactId>spring-cloud-config-server</artifactId>
</ dependency>
除此之外,开发人员还应该在主应用程序类上启用Config Server. 将服务器端口更改为888是一个好主意,因为客户端上spring.cloud.config.uri属性的默认值也是888端口。当然,这里说的是它在客户端上自动配置时的情况。要将服务器切换到不同的端口, 则应该将server.port属性设置在888端口上,或者使用spring config. name= configserver属性来启动它。下面是一个在spring cloud config. server库中嵌入的configserver.yml.
@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {
public static void main(Stringl] args) (
new
SpringApplicationBuilder (ConfigApplication.class) .web (true) .run (args);
}
}
构建客户端应用程序
如果将端口8888设置为服务器的默认端口,则客户端的配置就会变得非常简单。开发人员需要做的就是提供包含应用程序名称的bootstrap.yml文件,并在pom.xml中包含以下依赖项。当然,该规则仅适用于localhost,因为客户端自动配置的Config Server 地址就是ht://oc/hos/888.
<dependency>
<groupId>org. spr ingf ramework. cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
如果为服务器设置了不同于888的端口,或者它在与客户端应用程序不同的计算机上运行,则还应在bootstrap.yml中设置其当前地址。以下是Bootstrap的上下文设置,它允许开发人员从端口8889 上可用的服务器获取client-service 的属性。当使用--spring.profiles. active-zonel参数运行该应用程序时,它会自动获取配置服务器中为zonel配置文件设置的属性。
spring:
application:
name: client-service
cloud:
config:
uri: http://localhost:8889
开发人员可能已经注意到,客户端属性中存在发现服务网络位置的地址。因此,在启动客户端服务之前,应该运行Eureka Server。当然,Eureka 也有它自己的配置,并且已经存储在application.yml文件中,这在第4章的示例中已有说明。与client-service类似,该配置已分为3个配置文件,其中,每个配置文件在服务器的HTTP端口的数量和要与之通信的发现对等体列表等属性上都不同。
现在,可以将这些property文件放在配置服务器上。Eureka 将在启动时获取分配给所选配置文件的所有设置。文件命名与已描述的标准一致, 这意味着它应该是discovery-service- zone[n].yml.在运行Eureka Server之前,应该在依赖项中包含
spring-cloud-starter-config以启用Spring Cloud Config Client,并将application.yml替换为bootstrap.yml,如下所示。
spring:
application:
name: discovery-service
cloud:
config:
uri: http://localhost:8889
接下来,可以通过在--spring profiles.active属性中设置不同的配置文件名称,以对等通信模式运行Eureka Server 的3个实例。启动3个客户端服务实例后,我们的架构将如图5.1所示。与第4章中的示例相比,这里的客户端和发现服务都从Spring Cloud Config Server获取配置,而不是将其保存为胖JAR中的YML文件。
客户端引导方法
在之前介绍的示例解决方案中,所有应用程序都必须保持配置服务器的网络位置。服务发现的网络位置将作为属性存储在其中。在这一点上, 开发人员面临着一个需要讨论的有趣问题。这个问题是:我们的微服务是否应该知道Config Server 的网络地址? 在之前的讨论中我们同意这个结论:对于所有服务的网络位置来说,应保留的主要位置是服务发现服务器。配置服务器和其他微服务一样,也是Spring Boot应用程序,因此从逻辑上讲,它应该向Eureka注册它自己,以便为必须从Spring Cloud Config Server获取数据的其他服务启用自动发现机制。这反过来要求将服务发现连接设置放在bootstrap.yml中,而不是放在spring cloud.config.uri属性中。
在这两种不同方法之间进行选择,是开发人员在设计系统架构时需要做出的决策之一。这里的意思并不是说一个解决方案就一定比另外一个解决方案更好。对于任何使用spring-cloud-config-lient工件的应用程序来说,其默认行为在Spring Cloud术语中被称为配置优先引导(Config First Bootstrap) 。当配置客户端启动时,它会绑定到服务器并使用远程属性源初始化上下文。这个解决方案在本章介绍的第一个示例中已经有所体现。在第二个解决方案中,Config Server 将注册服务发现,并且所有应用程序都可以使用DiscoveryClient来定位它。这种方法被称为发现优先引导(Discovery First Botstrap)。接下来我们将通过一个具体示例来说明这个概念。要访问GitHub.上的这个示例,开发人员需要切换到config. _with_ discovery 分支。以下是其链接地址。
https://github. com/piomin/ sample -spr ing-cloud-netflix/tree/config with discovery.
第一个更改与sample-service -discovery模块有关。在本示例中,开发人员不需要spring- cloud. starter-config依赖,因为其简单配置并不是从远程属性源获取,而是在bootstrap.yml中设置的。与前面的示例不同,这里我们启动了一个独立的Eureka 实例,以简化练习。
spring:
application:
name: discovery- service
server :
port: ${PORT:8761}
eureka:
client:
registerWwithEureka: false
fetchRegistry: false
与前面的示例相比还有一个不同,那就是开发人员应该为Config Server 包含spring- cou-tarter-eureka依赖项。现在,完整的依赖项列表显示在以下代码中。此外,必须通过在主类上声明@EnableDiscoveryClient注释来启用发现客户端,并且应通过在application.yml文件中将
eureka.lcitseveicerl.defautZoe 属性设置为htp:/:/ocahost8761/eureka/来提供Eureka服务器地址。
<dependency>
<groupId>org. springfr amework. cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</ dependency>
<dependency>
<groupId>org .springframework. cloud</groupId>
<arti factId>spring-cloud-starter -eureka</artifactId>
</dependency>
在客户端应用程序中,不再需要保存配置服务器的地址,唯一要做的事情便是设置服务ID,以防它与Config Server 不同。根据以上示例中用于服务的命名约定,该ID应该是config-server。 它应该被spring .cloud.config discovery serviceld属性覆盖。为了允许发现机制启用,使得发现机制可以从配置服务器获取远程属性源,开发大员应该设置spring.cloud. config discovery.enabled-true.
spring:
application:
name: client-service
cloud:
config:
discovery:
enabled: true
serviceId: config-server
图5.2是包含Eureka 仪表板的屏幕截图,其中有一个Config Server 的实例和3个已经注册的client-service实例。该客户端的Spring Boot应用程序的每一个实例都与上一个示例相同,并且使用了-spring.profiles.active= zone[]参数启动,其中,n是区域的编号。唯一的区别是Spring Cloud Config Server 提供的所有客户端服务配置文件都具有与Eureka Server相同的连接地址。
总结
因为文章包含的内容实在是太多了,就不给大家做过多的介绍了,需要这份文档来学习的小伙伴,可以转发此文关注小编。
扫码来获取就可以了!
以上是关于使用SpringCloudConfig进行分布式配置:构建服务器端应用程序的主要内容,如果未能解决你的问题,请参考以下文章