暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

config client & eureka client 爬坑实录

梧书桐信 2019-05-15
599

前置:

  1. spring cloud 版本为: Greenwich.SR1

  2. 项目是 spring cloud config 以及 eureka 的客户端

  3. 将配置文件写在了 application.yml
     中;

处理过程

  1. 问题一:

  • 问题: 系统能正常启动,也能正常注册到eureka服务中心.但是读取不到spring cloud config 配置中心的配置项.

  • 解决方案:spring cloud config client 要读取配置文件bootstrap.yml
    中参数才能生效.将spring cloud config client 相关配置放到bootstrap.yml

# bootstrap.yml
spring:
# 配置中心
cloud:
config:
fail-fast: true
name: dan-api-gateway
profile: dev
discovery:
enabled: true
service-id: dan-config
  1. 问题二

  • 问题: 按照上述配置后,注册到eureka服务中心报错,系统不能启动.

# exception
was unable to refresh its cache! status = Cannot execute request on any known server
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1051) [eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:965) [eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.DiscoveryClient.<init>(DiscoveryClient.java:414) [eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.DiscoveryClient.<init>(DiscoveryClient.java:269) [eureka-client-1.9.8.jar:1.9.8]
at org.springframework.cloud.netflix.eureka.CloudEurekaClient.<init>(CloudEurekaClient.java:67) [spring-cloud-netflix-eureka-client-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$EurekaClientConfiguration.eurekaClient(EurekaClientAutoConfiguration.java:274) [spring-cloud-netflix-eureka-client-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$EurekaClientConfiguration$$EnhancerBySpringCGLIB$$13ec9940.CGLIB$eurekaClient$2(<generated>) [spring-cloud-netflix-eureka-client-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$EurekaClientConfiguration$$EnhancerBySpringCGLIB$$13ec9940$$FastClassBySpringCGLIB$$66cb137d.invoke(<generated>) [spring-cloud-netflix-eureka-client-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) [spring-core-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) [spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$EurekaClientConfiguration$$EnhancerBySpringCGLIB$$13ec9940.eurekaClient(<generated>) [spring-cloud-netflix-eureka-client-2.1.1.RELEASE.jar:2.1.1.RELEASE]
  • 解决方案: 核对了eureka客户端的各种配置参数,皆正确无误.实验了108种姿势后还是不对.不知怎么脑抽筋将application.yml
    中的配置信息合并到bootstrap.yml
    中再次启动了系统.居然正常了.既能注册到eureka服务中心,也能获取配置中心参数.

后记

    涉及知识点

  1. bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等

  2. application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等

  3. bootstrap.yml 先于 application.yml 加载

   上述问题的另外解法

  1. bootstrap.yml
    中的配置还原到配置文件application.yml
    中;

  2. 在配置文件application.yml
    中添加配置

spring:
cloud:
bootstrap:
enabled: false


文章转载自梧书桐信,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论