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

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



首先说EUREKA-server,

  • pom.xml
  • 关键jar包
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--eureka安全登录验证需要-->
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-security</artifactId>-->
        <!--</dependency>-->
</dependencies>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>
  • 如题异常大多说的是服务端配置这里:
eureka:
  client:
#    往eureka注册中心注册自己,默认为true
    register-with-eureka: false
#    单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false
    fetch-registry: false
  • 如果上述无误,那么往下继续看配置:
server:
  port: 8087
  servlet:
    context-path: /eureka

eureka:
  instance:
    hostname: localhost
    appname: eurekaServer
  client:
#    自己的eureka中注册自己,默认为true
    register-with-eureka: false
#    单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false
    fetch-registry: false
    service-url:
#      defaultZone: http://127.0.0.1:${server.port}/eureka/eureka/
      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应该为:

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

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

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

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

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

  • 启动类入口处需要装配以下注解:
  • @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

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

}


下来说EUREKA-client

  • pom.xml
  • 关键jar包
    <dependencies>
        <!--  添加springboot fegin依赖,product项目即可以作为生产者,又可以作为消费者-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
  • 【application.yml配置】
spring:
  application:
    name: mixer-server
eureka:
  instance:
    appname: mixer-server

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

对应EUREKA-server内的defauleZone

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

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

@SpringBootApplication
//@EnableEurekaClient 和 @EnableDiscoveryClient 都是让eureka发现该服务并注册到eureka上的注解
//相同点:都能让注册中心Eureka发现,并将该服务注册到注册中心上;
//不同点:@EnableEurekaClient只适用于Eureka作为注册中心,
//而@EnableDiscoveryClient可以是其他注册中心;
//@EnableDiscoveryClient
@EnableEurekaClient
//表示开启Fegin客户端a
@EnableFeignClients
public class MixerStationApplication {

    public static void main(String[] args) {
        SpringApplication.run(MixerStationApplication.class, args);
    }

}


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



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

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

40 个 SpringBoot 常用注解

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

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

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
"Cannot execute request on any known server" 是 Eureka 服务的一个异常,它表示无法在任何已知的服务器上执行请求。出现这个异常的原因可能是连接到 Eureka 服务端的地址不正确。解决这个问题的方法有以下几种: 1. 确保 Eureka 服务端的地址配置正确。在连接 Eureka 服务端时,需要在客户端的配置文件中指定正确的服务端地址。可以通过检查配置文件中的 eureka.client.service-url.defaultZone 属性来确认是否配置了正确的地址。 2. 检查网络连接。如果客户端无法访问到 Eureka 服务端,也会导致出现这个异常。可以尝试通过 ping 命令或者 telnet 命令来测试客户端是否能够正常连接到服务端。 3. 检查服务端是否正常运行。如果服务端没有正常启动或者出现了其他异常,也会导致客户端无法连接到服务端。可以检查服务端的日志文件或者尝试重新启动服务端来解决问题。 总结起来,解决 "Cannot execute request on any known server" 异常的关键是确保客户端配置的服务端地址正确,并且确保网络连接和服务端的正常运行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Eureka 客户端连接Eureka服务端时 报Cannot execute request on any known server 解决办法](https://blog.csdn.net/weixin_30795127/article/details/101113865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [springcloud服务端与客户端注册Demo](https://download.csdn.net/download/worldwhite/10476453)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Eureka启动报Cannot execute request on any known server异常](https://blog.csdn.net/weixin_53794227/article/details/124098368)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐 城

小朋友,你是不是有很多问号?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值