我是靠谱客的博主 柔弱季节,最近开发中收集的这篇文章主要介绍EurekaClient + spring cloud config + EurekaServer报错:ConnectException: Connection refused connect在经过几天的折腾之后。。终于找到答案了!!!,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

EurekaClient + spring cloud config 造成无法注册到Eureka中心


场景:在使用配置中心动态从配置中心拉取配置服务时,该服务本身不能被注册到Eureka中

架构如下图:
案例架构图

问题:会造成服务A无法注册到Eureka中心,但是能正常从Eureka中心拿到配置中心的服务,并拿到配置文件,只是服务A本身也是一个服务,必须要注册到服务中心

报错信息:

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
Caused by: java.net.ConnectException: Connection refused: connect
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

环境记录如下:只记录服务A的pom文件和两个yml文件

环境:

  • spring boot : 2.0.6.RELEASE
  • spring cloud : Finchley.SR1

服务A的pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>nihaosi-item</artifactId>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!--springboot 整合eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        <!--项目监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- 资源文件拷贝插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

服务A的bootstrap.yml文件

eureka:
  client:
    service-url:
      defaultZone: http://jhz:123456@127.0.0.1:8100/eureka/
    register-with-eureka: true
    fetch-registry: true
  instance:
    prefer-ip-address: true
    #ip-address: 127.0.0.1
    #instance-id: app-item###8081

spring:
  cloud:
    config:
      #uri: http://127.0.0.1:7788  #配置中心的地址
      profile: dev #对应配置服务中的{profile}
      label: master #对应的分支
      name: order
      discovery:
        enabled: true
        service-id: config-server
  application:
    name: app-item

服务A的application.yml文件

server:
  port: 8081

eureka:
  client:
    service-url:
      defaultZone: http://jhz:123456@127.0.0.1:8100/eureka/
    register-with-eureka: true
    fetch-registry: true
  instance:
    prefer-ip-address: true


app-item:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

#开启所有端点
management:
  endpoints:
    web:
     exposure:
       include: "*"

在经过几天的折腾之后。。终于找到答案了!!!

问题在于git仓库的配置文件:**存放在git的配置文件不单单只是一个存放配置信息的文件,config client客户端在通过config server 加载到配置文件后会把他当作该项目的配置文件进行加载,并且会覆盖本地的yml配置文件,重点来了,如果git远程的配置文件中配置有问题则会导致项目报错,我的问题就是远程git配置文件包含了Eureka配置,并且是错误的,所以导致项目启动疯狂报错:无法注册到Eureka中心;**下面是我的git仓库中的配置文件。

server:
  port: 8081

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/
    register-with-eureka: true
    fetch-registry: true
  instance:
    prefer-ip-address: true
    
 fast:
 	host: http://192.168.56.100
 	port: 80

很明显:

我的git仓库中的关于Eureka的配置是错误的,因为我启动的Eureka服务器没有在10086端口,并且是需要账登录的,所以启动项目会使用git中的配置注册Eureka,所以就一直报错。然后自己在本地疯狂找配置错误。。。

这里讲一下这几天找的报错的常见原因,(我这个是比较特殊的)有一下几点:

  1. Eureka注册中心配置单节点时,将自己注册到Eureka和拉取注册中心配置设置为false,要不然启动Eureka会报错。关于多节点配置请百度。
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/
    register-with-eureka: false # 重点
    fetch-registry: false # 重点
  1. 由于springcloud版本问题造成的配置写法稍有不同:我的版本是
  • spring boot : 2.0.6.RELEASE
  • spring cloud : Finchley.SR1

配置是这样的:

eureka:
  client:
    service-url:  # 注意这个地方,有些版本写法不同
      defaultZone: http://127.0.0.1:10086/eureka/
# 有些版本的写法
eureka:
  client:
    serviceUrl:  # 注意这个地方,驼峰式命名
      defaultZone: http://127.0.0.1:10086/eureka/
  1. 在Eureka服务端使用Security进行安全验证时配置稍有不同
spring:
  application:
    name: eureka-center
  security:
    basic:
      enable: true
    user:
      name: jhz
      password: 123456
server:
  port: 8100
eureka:
  client:
    service-url:
      defaultZone: http://jhz:123456@localhost:8100/eureka  #注意这里写法

并且在高版本需要手动关闭csrf,在Eureka服务器端增加一个配置类:

@Configuration
@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/actuator/**").permitAll()
                .anyRequest()
                .authenticated().and().httpBasic();
    }
}

好了,以上就是这次遇到错误并解决的全过程,希望能解决你的问题;仅供参考,如有不足欢迎指正。

最后

以上就是柔弱季节为你收集整理的EurekaClient + spring cloud config + EurekaServer报错:ConnectException: Connection refused connect在经过几天的折腾之后。。终于找到答案了!!!的全部内容,希望文章能够帮你解决EurekaClient + spring cloud config + EurekaServer报错:ConnectException: Connection refused connect在经过几天的折腾之后。。终于找到答案了!!!所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部