震惊!【Eureka】发生Cannot execute request on any known server异常这样解决

叁歲伎倆 2022-11-02 13:21 307阅读 0赞

如题异常相对会出现的概率较大,原因也不一,以下也就不单说以上异常了,具体说下各部分我运行正常后的配置



首先说EUREKA-server,

  • pom.xml
  • 关键jar包



    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server
    3.0.1


    org.springframework.boot
    spring-boot-starter-web









    org.springframework.cloud
    spring-cloud-dependencies
    Hoxton.SR6
    pom
    import


  • 如题异常大多说的是服务端配置这里:

    eureka:
    client:

    往eureka注册中心注册自己,默认为true

    1. register-with-eureka: false

    单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false

    1. fetch-registry: false
  • 如果上述无误,那么往下继续看配置:

    server:
    port: 8087
    servlet:

    1. context-path: /eureka

    eureka:
    instance:

    1. hostname: localhost
    2. appname: eurekaServer

    client:

    自己的eureka中注册自己,默认为true

    1. register-with-eureka: false

    单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false

    1. fetch-registry: false
    2. service-url:

    defaultZone: http://127.0.0.1:${server.port}/eureka/eureka/

    1. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/eureka/

service-url的defaultZone配置:

一般设置不对的话会出现此异常【MismatchedInputException: Root name ‘timestamp’ does not match expected……

1.如果在【server.servlet.context-path】中配置了【context-path】,如上图我的是 【/eureka】,那么defaultZone应该为:

  1. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/eureka/

否则,如果没有配置【server.servlet.context-path】,应该为:

  1. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

以下是完整的EUREKA-server配置:

  1. server:
  2. port: 8087
  3. servlet:
  4. context-path: /eureka
  5. eureka:
  6. instance:
  7. hostname: localhost
  8. appname: eurekaServer
  9. client:
  10. # 自己的eureka中注册自己,默认为true
  11. register-with-eureka: false
  12. # 单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false
  13. fetch-registry: false
  14. service-url:
  15. # defaultZone: http://127.0.0.1:${server.port}/eureka/eureka/
  16. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/eureka/
  17. server:
  18. #设为false,关闭自我保护,即Eureka server在云心光器件会去统计心跳失败比例在15分钟之内是否低于85%,如果低于85%,EurekaServer
  19. #会将这些事例保护起来,让这些事例不会过期,但是在保护器内如果刚哈这个服务提供者非正常下线了,此时服务消费者会拿到一个无效的服务
  20. #实例,此时调用会失败,对于这个问题需要服务消费者端有一些容错机制,如重试、断路器等;
  21. enable-self-preservation: true
  22. #扫描失效服务的间隔时间(单位是毫秒,摩恩是60*1000),即60s
  23. eviction-interval-timer-in-ms: 10000
  • 最后的server依各人需求,可配可不配

  • 启动类入口处需要装配以下注解:
  • @EnableEurekaServer

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaApplication {

    1. public static void main(String[] args) {
    2. SpringApplication.run(EurekaApplication.class, args);
    3. }

    }



下来说EUREKA-client

  • pom.xml
  • 关键jar包




    org.springframework.cloud
    spring-cloud-starter-openfeign



    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client

  • 【application.yml配置】

  1. spring:
  2. application:
  3. name: mixer-server
  4. eureka:
  5. instance:
  6. appname: mixer-server

以上appname 和 name 二选其一用来标识在EUREKA-server内的name

20210225162606940.png

对应EUREKA-server内的defauleZone

  1. spring:
  2. application:
  3. name: mixer-server
  4. eureka:
  5. #与spring.application.name二选其一作为euraka-server服务标识,此处我使用的是前者
  6. #instance:
  7. #appname: user-server
  8. client:
  9. service-url:
  10. defaultZone: http://localhost:8087/eureka/eureka/

启动类入口处需要装配如图注解:

  1. @SpringBootApplication
  2. //@EnableEurekaClient 和 @EnableDiscoveryClient 都是让eureka发现该服务并注册到eureka上的注解
  3. //相同点:都能让注册中心Eureka发现,并将该服务注册到注册中心上;
  4. //不同点:@EnableEurekaClient只适用于Eureka作为注册中心,
  5. //而@EnableDiscoveryClient可以是其他注册中心;
  6. //@EnableDiscoveryClient
  7. @EnableEurekaClient
  8. //表示开启Fegin客户端a
  9. @EnableFeignClients
  10. public class MixerStationApplication {
  11. public static void main(String[] args) {
  12. SpringApplication.run(MixerStationApplication.class, args);
  13. }
  14. }


写在最后:或者可以试试 先启动server,再启动client



20210803154022504.gif

20210626100647986.gif

五年从程序员到架构师!这是我见过史上最好的程序员职业规划

(下一篇) 16 条 yyds 的代码规范

40 个 SpringBoot 常用注解

别慌,在Java面试的时候,面试官会这样问关于框架的问题?

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTcwNjU4_size_16_color_FFFFFF_t_70

想要实时关注更多干货好文,扫描下图关注:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTcwNjU4_size_16_color_FFFFFF_t_70 1

其他与之相关的异常请前往Springboot、Springcloud、Eureka

发表评论

表情:
评论列表 (有 0 条评论,307人围观)

还没有评论,来说两句吧...

相关阅读