根据环境变量使用Consul或Kubernetes发现客户端



我正试图根据我的Env变量添加两个不同的发现客户端。我想这样做是为了更容易的本地开发,而不需要运行本地k8s集群。

cloud:
retry:
initial-interval: 10
max-interval: 20
kubernetes:
discovery:
enabled: ${!CONSUL_ENABLED:true}
consul:
host: ${CONSUL_HOST:localhost}
port: ${CONSUL_PORT:8500}
discovery:
enabled: ${CONSUL_ENABLED:false}
fail-fast: true
instance-id: ${spring.application.name}-${server.port}-${instance-id}
health-check-path: /actuator/health
health-check-interval: 20s

我的等级文件:

implementation 'org.springframework.cloud:spring-cloud-starter-kubernetes'
implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery'

但此配置失败并出现错误:

Field registration in org.springframework.cloud.netflix.zuul.ZuulProxyAutoConfiguration required a single bean, but 2 were found:
- getRegistration: defined by method 'getRegistration' in class path resource [org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientAutoConfiguration.class]
- consulRegistration: defined by method 'consulRegistration' in class path resource [org/springframework/cloud/consul/serviceregistry/ConsulAutoServiceRegistrationAutoConfiguration.class]

有办法做到这一点吗?

好的,我找到了方法,你必须禁用所有K8,而不仅仅是发现:

cloud:
retry:
initial-interval: 10
max-interval: 20
kubernetes:
discovery:
enabled: ${K8S_ENABLED:true}
enabled: ${K8S_ENABLED:true}
consul:
host: ${CONSUL_HOST:localhost}
port: ${CONSUL_PORT:8500}
discovery:
enabled: ${CONSUL_ENABLED:false}
fail-fast: true
instance-id: ${spring.application.name}-${server.port}-${instance-id}
health-check-path: /actuator/health
health-check-interval: 20s

但是有没有一种方法可以将K8S_ENABLED和CONSUL_ENABLED变量组合为一?

最新更新