在 Azure 容器应用中为 Eureka Server for Spring 组件配置设置
Eureka Server for Spring 是微服务的集中式服务发现机制。 使用以下指南了解如何配置和管理 Eureka Server for Spring 组件。
显示
可以使用 show
命令按名称查看单个组件的详细信息。
在运行以下命令之前,请将 <>
括起来的占位符替换为你的值。
az containerapp env java-component eureka-server-for-spring 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>
Eureka Server for Spring 的允许配置列表
以下列表详细介绍了受支持的配置。 可以在Spring Cloud Eureka Server中找到更多详细信息。
注意
请提交新功能请求的支持票证。
配置选项
az containerapp update
命令使用--configuration
参数控制 Eureka Server for Spring 的配置方式。 只要多个参数被空格分隔,就可以一次性使用它们。 可以在Spring Cloud Eureka Server文档中找到更多详细信息。
eureka.server
配置属性上提供了以下配置设置。
名称 | 说明 | 默认值 |
---|---|---|
eureka.server.enable-self-preservation |
启用后,服务器会跟踪应从服务器接收的续订数。 无论何时,续订数都低于 eureka.server.renewal-percent-threshold 定义的阈值百分比。 在原始 Eureka 服务器中,默认值设置为true ,但在 Eureka Server Java 组件中,默认值设置为false 。 请参阅 Eureka Server for Spring Java 组件的限制 |
false |
eureka.server.renewal-percent-threshold |
由 eureka.server.renewal-threshold-update-interval-ms 指定的时间段内客户端预期的最小续订百分比。 如果续订低于阈值,则启用 eureka.server.enable-self-preservation 时会禁用过期。 | 0.85 |
eureka.server.renewal-threshold-update-interval-ms |
需要更新 eureka.server.renewal-percent-threshold 中指定的阈值的间隔。 | 0 |
eureka.server.expected-client-renewal-interval-seconds |
客户端应发送检测信号的间隔。 默认值为 30 秒。 如果客户端以不同的频率发送检测信号(例如,每 15 秒一次),则应相应地优化此参数,否则自我保存将无法按预期工作。 | 30 |
eureka.server.response-cache-auto-expiration-in-seconds |
获取当未因更改事件失效时注册表有效负载应保留在缓存中的时间。 | 180 |
eureka.server.response-cache-update-interval-ms |
获取应更新客户端的有效负载缓存的时间间隔。 | 0 |
eureka.server.use-read-only-response-cache |
com.netflix.eureka.registry.ResponseCache 目前使用两级缓存策略来响应。 具有过期策略的 readWrite 缓存,以及缓存不过期的 readonly 缓存。 | 是 |
eureka.server.disable-delta |
检查能否向客户端提供增量信息。 | false |
eureka.server.retention-time-in-m-s-in-delta-queue |
获取客户端应缓存增量信息的时间,以检索值而不丢失该值。 | 0 |
eureka.server.delta-retention-timer-interval-in-ms |
获取清理任务应唤醒的时间间隔,并检查过期的增量信息。 | 0 |
eureka.server.eviction-interval-timer-in-ms |
获取使实例过期的任务应唤醒并运行的时间间隔。 | 60000 |
eureka.server.sync-when-timestamp-differs |
检查时间戳不同时是否同步实例。 | 是 |
eureka.server.rate-limiter-enabled |
指示是应启用还是禁用速率限制器。 | false |
eureka.server.rate-limiter-burst-size |
速率限制器,令牌存储桶算法属性。 | 10 |
eureka.server.rate-limiter-registry-fetch-average-rate |
速率限制器,令牌存储桶算法属性。 指定平均强制请求速率。 | 500 |
eureka.server.rate-limiter-privileged-clients |
经过认证的客户端列表。 这是标准 eureka Java 客户端的补充。 | 空值 |
eureka.server.rate-limiter-throttle-standard-clients |
指示是否对标准客户端进行速率限制。 如果设置为 false,则只有非标准客户端将受到速率限制。 | false |
eureka.server.rate-limiter-full-fetch-average-rate |
速率限制器,令牌存储桶算法属性。 指定平均强制请求速率。 | 100 |
常见配置
- 日志记录相关配置
- logging.level.*
- logging.group.*
- 应禁止使用 logging.* 命名空间下的任何其他配置,例如,应禁止使用
logging.file
写入日志文件。
应用程序之间的调用
此示例演示如何编写 Java 代码,以便在使用 Eureka Server for Spring 组件注册的应用程序之间进行调用。 当容器应用与 Eureka 绑定时,它们通过 Eureka 服务器相互通信。
该示例创建两个应用程序,即调用方和被调用方。 两个应用程序都使用 Eureka Server for Spring 组件相互通信。 被调用方应用程序公开由调用方应用程序调用的终结点。
创建被调用方应用程序。 将
@EnableDiscoveryClient
注释添加到主类,以在 Spring Boot 应用程序中启用 Eureka 客户端。@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }
在被调用方应用程序调用的被调用方应用程序中创建终结点。
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }
在应用程序配置文件中设置被调用方应用程序的名称。 例如,application.yml。
spring.application.name=callee
创建调用方应用程序。
添加
@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(); } }
在调用方应用程序中创建控制器,该控制器使用
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); } }
现在,你有一个使用 Eureka Server for Spring Java 组件相互通信的调用方和被调用方应用程序。 在调用方应用程序中测试/call-callee
终结点之前,请确保这两个应用程序都在运行并绑定到 Eureka 服务器。
限制
Eureka Server Java 组件附带默认配置,
eureka.server.enable-self-preservation
设置为false
。 此默认配置有助于避免启用自保存后未删除实例的时间。 如果实例太早删除,则一些请求可能会定向到不存在的实例。 如果要将此设置更改为true
,可以在 Java 组件中设置自己的配置以覆盖此设置。Eureka 服务器只有一个副本,不支持缩放,使对等 Eureka 服务器功能不可用。
Eureka 仪表板不可用。