Spring GCP 上的 Cloud Consul 健康检查和状态配置
Spring Cloud Consul health check and status configuration on GCP
我们正在尝试注册一个 spring-cloud-consul application with consul on GCP compute engine,它可以在 consul 中注册应用程序,但是我们面临着两个应用程序问题。下面是申请的bootstrap.yaml
和server.yaml,
application.yaml
server:
port: 10003
spring:
application:
name: hello-service
cloud:
consul:
enabled: true
inetutils:
useOnlySiteLocalInterfaces: true
endpoints:
actuator:
sensitive: false
bootstrap.yaml
spring:
cloud:
consul:
enabled: true
host: 10.160.0.18
port: 8500
discovery:
prefer-ip-address: true
- Consul 无法在计算引擎上调用健康检查,可能是因为它已在实例的内部域名上注册。
service with consul: NewService{id='hello-service-10003',
name='hello-service', tags=[secure=false],
address='consul-app-test.c.name-of-project.internal', meta=null,
port=10003, enableTagOverride=null, check=Check{script='null',
interval='10s', ttl='null',
http='http://consul-app-test.c.name-of-project.internal:10003/actuator/health',
method='null', header={}, tcp='null', timeout='null',
deregisterCriticalServiceAfter='null', tlsSkipVerify=null,
status='null'}, checks=null}
- 申请,不是从领事处注销。我们已经停止了应用程序,它仍然显示在 consul UI.
上
我在 application.yaml 和 bootstrap.yaml 这对我有用。
application.yaml
spring:
application:
name: hello-service
cloud:
consul:
discovery:
instanceId: ${spring.application.name}:${random.value}
health-check-critical-timeout: 3m
prefer-ip-address: true # disable if we want to use google cloud internal DNS
bootstrap.yaml
spring:
cloud:
consul:
enabled: true
host: 10.160.0.18
port: 8500
如果你像我一样使用 2.1.2
版本:org.springframework.cloud:spring-cloud-starter-consul-discovery:2.1.2.RELEASE
您可以设置:
spring:
cloud:
consul:
host: localhost # consul的地址
port: 8500 # consul 的端口
discovery:
prefer-ip-address: true # // This must be matched
tags: version=1.0
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}
healthCheckPath: /actuator/health # 服务做健康检查的端口
healthCheckInterval: 15s # 服务健康检查的周期
healthCheckTimeout: 60s # 服务检查是的timeout时长
healthCheckCriticalTimeout: 5m # 服务健康检查失败5分钟后,删除服务
你可以在ConsulDiscoveryProperties
中查看源代码:
@ConfigurationProperties("spring.cloud.consul.discovery")
public class ConsulDiscoveryProperties {
……
/** Is service discovery enabled? */
private boolean enabled = true;
/** Alternate server path to invoke for health checking. */
private String healthCheckPath = "/actuator/health";
/** Custom health check url to override default. */
private String healthCheckUrl;
/** How often to perform the health check (e.g. 10s), defaults to 10s. */
private String healthCheckInterval = "10s";
/** Timeout for health check (e.g. 10s). */
private String healthCheckTimeout;
/**
* Timeout to deregister services critical for longer than timeout (e.g. 30m).
* Requires consul version 7.x or higher.
*/
private String healthCheckCriticalTimeout;
……
我们正在尝试注册一个 spring-cloud-consul application with consul on GCP compute engine,它可以在 consul 中注册应用程序,但是我们面临着两个应用程序问题。下面是申请的bootstrap.yaml
和server.yaml,
application.yaml
server:
port: 10003
spring:
application:
name: hello-service
cloud:
consul:
enabled: true
inetutils:
useOnlySiteLocalInterfaces: true
endpoints:
actuator:
sensitive: false
bootstrap.yaml
spring:
cloud:
consul:
enabled: true
host: 10.160.0.18
port: 8500
discovery:
prefer-ip-address: true
- Consul 无法在计算引擎上调用健康检查,可能是因为它已在实例的内部域名上注册。
service with consul: NewService{id='hello-service-10003', name='hello-service', tags=[secure=false], address='consul-app-test.c.name-of-project.internal', meta=null, port=10003, enableTagOverride=null, check=Check{script='null', interval='10s', ttl='null', http='http://consul-app-test.c.name-of-project.internal:10003/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null'}, checks=null}
- 申请,不是从领事处注销。我们已经停止了应用程序,它仍然显示在 consul UI. 上
我在 application.yaml 和 bootstrap.yaml 这对我有用。
application.yaml
spring:
application:
name: hello-service
cloud:
consul:
discovery:
instanceId: ${spring.application.name}:${random.value}
health-check-critical-timeout: 3m
prefer-ip-address: true # disable if we want to use google cloud internal DNS
bootstrap.yaml
spring:
cloud:
consul:
enabled: true
host: 10.160.0.18
port: 8500
如果你像我一样使用 2.1.2
版本:org.springframework.cloud:spring-cloud-starter-consul-discovery:2.1.2.RELEASE
您可以设置:
spring:
cloud:
consul:
host: localhost # consul的地址
port: 8500 # consul 的端口
discovery:
prefer-ip-address: true # // This must be matched
tags: version=1.0
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}
healthCheckPath: /actuator/health # 服务做健康检查的端口
healthCheckInterval: 15s # 服务健康检查的周期
healthCheckTimeout: 60s # 服务检查是的timeout时长
healthCheckCriticalTimeout: 5m # 服务健康检查失败5分钟后,删除服务
你可以在ConsulDiscoveryProperties
中查看源代码:
@ConfigurationProperties("spring.cloud.consul.discovery")
public class ConsulDiscoveryProperties {
……
/** Is service discovery enabled? */
private boolean enabled = true;
/** Alternate server path to invoke for health checking. */
private String healthCheckPath = "/actuator/health";
/** Custom health check url to override default. */
private String healthCheckUrl;
/** How often to perform the health check (e.g. 10s), defaults to 10s. */
private String healthCheckInterval = "10s";
/** Timeout for health check (e.g. 10s). */
private String healthCheckTimeout;
/**
* Timeout to deregister services critical for longer than timeout (e.g. 30m).
* Requires consul version 7.x or higher.
*/
private String healthCheckCriticalTimeout;
……