在 Azure 容器应用中配置 Spring Cloud Eureka Server 组件的设置(预览版)

Spring Cloud Eureka Server 是微服务的集中式服务发现机制。 使用以下指南了解如何配置和管理 Spring Cloud Eureka Server 组件。

显示

可以使用 show 命令按名称查看单个组件的详细信息。

在运行以下命令之前,请将 <> 括起来的占位符替换为你的值。

az containerapp env java-component spring-cloud-eureka show \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --name <JAVA_COMPONENT_NAME>

列出

可以使用 list 命令列出所有注册的 Java 组件。

在运行以下命令之前,请将用<>括起来的占位符替换为你的值。

az containerapp env java-component list \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP>

取消绑定

若要从容器应用中移除绑定,请使用 --unbind 选项。

在运行以下命令之前,请将用<>括起来的占位符替换为你的值。

az containerapp update \
  --name <APP_NAME> \
  --unbind <JAVA_COMPONENT_NAME> \
  --resource-group <RESOURCE_GROUP>

Spring Cloud Eureka 的允许配置列表

以下列表详细介绍了受支持的配置。 可以在Spring Cloud Eureka Server中找到更多详细信息。

注意

请提交新功能请求的支持票证。

配置选项

az containerapp update命令使用--configuration参数控制 Spring Cloud Eureka Server 的配置方式。 只要多个参数被空格分隔,就可以一次性使用它们。 可以在Spring Cloud Eureka Server文档中找到更多详细信息。

eureka.server配置属性上提供了以下配置设置。

名称 说明 默认值
enable-self-preservation 启用后,服务器会跟踪应从服务器接收的续订数。 无论何时,续订数都低于renewal-percent-threshold定义的阈值百分比。 在原始 Eureka 服务器中,默认值设置为true,但在 Eureka Server Java 组件中,默认值设置为false。 请参阅Spring Cloud Eureka Java 组件的限制 false
renewal-percent-threshold renewal-threshold-update-interval-ms指定的时间段内客户端预期的最小续订百分比。 如果续订低于阈值,则在启用enable-self-preservation时禁用过期。 0.85
renewal-threshold-update-interval-ms 更新renewal-percent-threshold中指定的阈值的时间间隔。 0
expected-client-renewal-interval-seconds 客户端应发送检测信号的间隔。 默认值为30秒。 如果客户端以不同的频率发送检测信号,则使此值与发送频率匹配,以确保自保存按预期工作。 30
response-cache-auto-expiration-in-seconds 获取当未因更改事件失效时注册表有效负载保留在缓存中的时间。 180
response-cache-update-interval-ms 获取更新客户端的有效负载缓存的时间间隔。 0
use-read-only-response-cache com.netflix.eureka.registry.ResponseCache使用两级缓存策略来响应。 具有过期策略的readWrite缓存,以及缓存不过期的readonly缓存。 true
disable-delta 检查是否向客户端提供增量信息。 false
retention-time-in-m-s-in-delta-queue 获取客户端缓存增量信息的时间,以检索值而不丢失该值。 0
delta-retention-timer-interval-in-ms 获取清理任务唤醒的时间间隔,以检查过期的增量信息。 0
eviction-interval-timer-in-ms 获取使实例唤醒和运行过期的任务的时间间隔。 60000
sync-when-timestamp-differs 检查时间戳不同时是否同步实例。 true
rate-limiter-enabled 指示是已启用还是已禁用速率限制器。 false
rate-limiter-burst-size 速率限制器,令牌存储桶算法属性。 10
rate-limiter-registry-fetch-average-rate 速率限制器,令牌存储桶算法属性。 指定平均强制请求速率。 500
rate-limiter-privileged-clients 认证客户端列表是标准 Eureka Java 客户端的补充。 空值
rate-limiter-throttle-standard-clients 指示是否对标准客户端进行速率限制。 如果设置为false,则只有非标准客户端受到速率限制。 false
rate-limiter-full-fetch-average-rate 速率限制器,令牌存储桶算法属性。 指定平均强制请求速率。 100

常见配置

  • 日志记录相关配置
    • logging.level.*
    • logging.group.*
    • 应禁止使用 logging.* 命名空间下的任何其他配置,例如,应禁止使用logging.file写入日志文件。

应用程序之间的调用

此示例演示了如何编写 Java 代码,以在注册到 Spring Cloud Eureka 组件的应用程序之间进行调用。 当容器应用与 Eureka 绑定时,它们通过 Eureka 服务器相互通信。

该示例创建两个应用程序,即调用方和被调用方。 这两个应用程序都使用 Spring Cloud Eureka 组件相互通信。 被调用方应用程序公开由调用方应用程序调用的终结点。

  1. 创建被调用方应用程序。 将@EnableDiscoveryClient注释添加到主类,以在 Spring Boot 应用程序中启用 Eureka 客户端。

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
        public static void main(String[] args) {
            SpringApplication.run(CalleeApplication.class, args);
        }
    }
    
  2. 在被调用方应用程序调用的被调用方应用程序中创建终结点。

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. 在应用程序配置文件中设置被调用方应用程序的名称。 例如,application.yml

    spring.application.name=callee
    
  4. 创建调用方应用程序。

    添加@EnableDiscoveryClient注释以启用 Eureka 客户端功能。 此外,使用@LoadBalanced注释创建WebClient.Builder豆,以执行对其他服务的负载均衡调用。

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CallerApplication {
        public static void main(String[] args) {
            SpringApplication.run(CallerApplication.class, args);
        }
    
        @Bean
        @LoadBalanced
        public WebClient.Builder loadBalancedWebClientBuilder() {
            return WebClient.builder();
        }
    }
    
  5. 在调用方应用程序中创建控制器,该控制器使用WebClient.Builder通过其应用程序名称被调用方调用方应用程序。

    @RestController
    public class CallerController { 
        @Autowired
        private WebClient.Builder webClientBuilder;
    
        @GetMapping("/call-callee")
        public Mono<String> callCallee() {
            return webClientBuilder.build()
                .get()
                .uri("http://callee/call")
                .retrieve()
                .bodyToMono(String.class);
        }
    }
    

现在,你有调用方和被调用方应用程序,它们使用 Spring Cloud Eureka Java 组件相互通信。 在调用方应用程序中测试/call-callee终结点之前,请确保这两个应用程序都在运行并绑定到 Eureka 服务器。

限制

  • Eureka Server Java 组件附带默认配置,eureka.server.enable-self-preservation设置为false。 此默认配置有助于避免启用自保存后未删除实例的时间。 如果实例太早删除,则一些请求可能会定向到不存在的实例。 如果要将此设置更改为true,可以在 Java 组件中设置自己的配置以覆盖此设置。

  • Eureka 服务器只有一个副本,不支持缩放,使对等 Eureka 服务器功能不可用。

  • Eureka 仪表板不可用。