51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Spring Cloud 通过配置文件禁用服务发现

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 中添加 WebEureka 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 服务器仪表板上看到:

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 服务器仪表板上看到:

Eureka 服务器仪表板上注册的服务

4.1、测试 Profile {#41测试-profile}

接下来,在运行应用时添加 Profile。

可以添加命令行参数 -Dspring.profiles.active=dev 来启用 dev Profile。运行应用时,可以看到客户端这次没有向 Eureka 服务器注册:

客户端未注册到 Eureka 服务器

5、总结 {#5总结}

本文介绍了如何在 Spring Cloud 中使用 Properties 文件和 Profile 机制来禁用、启用客户端服务发现。


参考:https://www.baeldung.com/spring-cloud-disable-discovery-clients

赞(3)
未经允许不得转载:工具盒子 » Spring Cloud 通过配置文件禁用服务发现