1、概览 {#1概览}
在 Spring Cloud 中可以通过配置文件来启用、禁用服务发现,而不需要改动代码。
2、 设置 Eureka Server 和 Eureka Client {#2-设置-eureka-server-和-eureka-client}
先创建一个 Eureka 服务器和一个 Discovery Client。
Eureka 服务创建过程,略!
2.1、Discovery Client 设置 {#21discovery-client-设置}
创建 "Discovery Client" 应用,在 Eureka Server 上进行注册。
在 pom.xml
中添加 Web 和 Eureka Client starter 依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
还需要在 dependencyManagement
中添加 spring-cloud-starter-parent
依赖,用于定义 cloud 组件的版本。
如果使用 Spring Initializr 创建项目,这些参数已经设置好了。如果没有,可以手动添加到 pom.xml
文件中:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>${spring-cloud-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<spring-cloud-dependencies.version>2021.0.3</spring-cloud-dependencies.version>
</properties>
2.2、添加配置文件 {#22添加配置文件}
接下来,在 application.properties
文件中添加客户端应用的配置属性:
eureka.client.serviceUrl.defaultZone=${EUREKA_URI:http://localhost:8761/eureka}
eureka.instance.preferIpAddress=false
spring.application.name=spring-cloud-eureka-client
如上,这将确保应用启动时,能在 Eureka 服务器(位于上面指定的 URL)上注册。它的服务名为 spring-cloud-eureka-client
。
注意,通常客户端需要配置类上使用 @EnableDiscoveryClient
注解来启用 Discovery Client。但是,如果我们使用 Spring Cloud Starter,则不需要使用注解。Discovery Client 默认已启用。此外,当它在类路径(classpath)上找到 Netflix Eureka Client 时,就会自动配置它。
2.3、Hello World Controller {#23hello-world-controller}
创建一个简单的 Controller,返回一个问候信息。用于测试应用。
@RestController
public class HelloWorldController {
@RequestMapping("/hello")
public String hello() {
return "Hello World!";
}
}
运行 Eureka 服务器和 Discovery Client。应用启动时,Discovery Client 将向Eureka 服务器注册。我们可以在 Eureka 服务器仪表板上看到:
3、基于配置文件的配置 {#3基于配置文件的配置}
在某些情况下,我们可能希望禁用服务注册。
例如,我们可能希望在本地开发环境中禁用 Discovery Client,因为每次要进行本地测试时都运行 Eureka 服务器是不必要的。
可以直接更改 application.properties
文件中的属性,在每个 Profile 中启用或禁用 Discovery Client。
3.1、使用独立的 properties 文件 {#31使用独立的-properties-文件}
一种简单且常用的方法是在每个环境中使用单独的 properties 文件。
创建另一个名为 application-dev.properties
的 properties 文件:
spring.cloud.discovery.enabled=false
通过 spring.cloud.discovery.enabled
属性启用/禁用 Discovery Client。
我们将其设置为 false
以禁用 Discovery Client。
当 dev
profile 处于活动状态时,将使用该文件代替原始 properties 文件。
3.2、使用多文档文件 {#32使用多文档文件}
如果不想在每个环境中使用单独的文件,另一个选择是使用多文档 properties 文件。
添加两个属性:
#---
spring.config.activate.on-profile=dev
spring.cloud.discovery.enabled=false
使用 #---
将 properties 文件分为两部分。此外,还定义了 spring.config.activate.on-profile
属性。这两行结合使用,指示应用只有在某个 Profile 处于活动状态时,才读取当前部分中定义的属性。在本例中,将使用 dev Profile。
与之前一样,将 spring.cloud.discovery.enabled
属性设置为 false
。
这将在 dev Profile 中禁用 Discovery Client,但在 Profile 未激活时保持启用状态。
4、测试 {#4测试}
现在,运行 Eureka 服务器和 Discovery Client 并测试一切是否按预期运行。目前还没有添加 Profile。当运行应用时,Discovery Client 将向 Eureka 服务器注册,可以在 Eureka 服务器仪表板上看到:
4.1、测试 Profile {#41测试-profile}
接下来,在运行应用时添加 Profile。
可以添加命令行参数 -Dspring.profiles.active=dev
来启用 dev Profile。运行应用时,可以看到客户端这次没有向 Eureka 服务器注册:
5、总结 {#5总结}
本文介绍了如何在 Spring Cloud 中使用 Properties 文件和 Profile 机制来禁用、启用客户端服务发现。
参考:https://www.baeldung.com/spring-cloud-disable-discovery-clients