SpringCloud报Cannot execute request on any known server或者Connection refused

一、Service-url:DefaultZone配置不对

我们在选择SpringCloud的Eureka作为注册中心,让客户端去注册服务时经常会遇到因为一些配置的原因会报Cannot execute request on any known serve之类的错误。

本人用的SpringCloud的版本是Greenwich.SR1,Springboot是2.1.5的,这应该是在今年6月前最新的版本了。我在做服务的注册与发现的时候,想把service-url的DefaultZone这项的地址改为自定义的地址,如:http://localhost:10240/Register/.然后把eureka Server启动起来,进程没问题;但是当在客户端的Application.yml文件中把Service-url:DefaultZone的值指定成Server端的地址,即:http://localhost:10240/Register/,如下是我的配置:

Server端:

server:
  port: 9000

eureka:
  instance:
    hostname: localhost
    instance-id: Register
  client:
    service-url:
      defaultZone: http://localhost:9000/Register
    fetch-registry: false
    register-with-eureka: false
#    设置访问安全性
Client端:
server:
  port: 10240

eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/Register

spring:
  application:
    name: Login

此时,启动客户端就会报“无法在任何已知服务上执行请求”,或者“连接拒绝”(由于小弟对SpringCloud只是刚刚才看了几天,所以好些东西不太明白)。经过多翻试探之后,发现:Eureka的defaltZone的值,后缀只有是以“/eureka”结尾,即需要把Server端与客户端的service-url:defaultZone的值都统一改成:http://localhost:9000/eureka,再分别运行Server端,Client端,服务注册与发现Okay了。

本人现在还没有跟踪出能自定义这个Service-url后缀的方法,这点还得求网上的大神指点。

二、Eureka服务在加入Security Authentication时

旧版本的Springclound在Eureka Server端加入Spring-Boot的Security包后,在Application.yml文件里配置上如下行:

security:
    user:
        name: username
        password: pwd
       basic:
           enable: true
并且在服务端,客户端的Service-url:DefaultZone里配置成http://username:pwd@localhost:9000/eureka貌似就可以实现Eureka的服务注册请求加密了.但是在我使用的这个SprinCloud版本中,配置有所改动:原来的以Security开头的配置都过期了,而且安全认证这块默认就是开房的;运行Eureka Server端倒是能正常运行;但是当运行Client的时候,Client也会报“无法在任何已知服务上执行请求”,或者“连接拒绝”。

发生该问题的原因是SpringCloud在你往Maven里添加Spring-boot-Stater-Security包时就已经默认开启了密码认证这一功能,而且,根据官网的描述,只要开启了这一安全认证,Eureka默认每一个对当前服务的请求都需要一个CSRF Token被随着发送过来,因此解决办法是采用官网的推荐做法:扩展“WebSecurityConfigurerAdapter”类并重载Configure方法,拦截Http里所有类似“/eureka/**”的请求,然后忽略它就行,同时需要在这个类上添加EnableWebSecurity注册,如下:

@EnableWebSecurity
    public static class IgnoreEruekaClientSecurity extends WebSecurityConfigurerAdapter{
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().ignoringAntMatchers("/eureka/**");
            super.configure(http);
        }
    }

重新启动Server与Client,服务就能成功注册

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当出现"Cannot execute request on any known server"或者"Connection refused"的错误时,通常是由于Eureka注册中心配置的问题导致的。 有两个常见的配置问题可能导致这个错误。首先,检查Eureka客户端的配置,确保`defaultZone`的值与Eureka服务器的地址一致。这个值应该是`http://localhost:9000/eureka`,确保URL的结尾是`/eureka`。 其次,检查Eureka服务器和客户端的安全认证配置。如果使用了安全认证,可以通过在`security`部分添加用户名和密码来实现加密的服务注册请求。在Eureka服务器和客户端的`service-url:defaultZone`中配置`http://username:password@localhost:9000/eureka`。 如果以上配置都正确,但仍然出现错误,可能是由于其他原因导致的。可能是由于网络问题,客户端不能连接Eureka服务器。可以尝试检查网络连接或者防火墙设置。 综上所述,当出现"Cannot execute request on any known server"或者"Connection refused"的错误时,可以通过检查Eureka客户端的`defaultZone`配置和安全认证配置以及网络连接来解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringCloudCannot execute request on any known server或者Connection refused](https://blog.csdn.net/lastmoon52/article/details/90579089)[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: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值