概述
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,所以就一直报错。然后自己在本地疯狂找配置错误。。。
这里讲一下这几天找的报错的常见原因,(我这个是比较特殊的)有一下几点:
- Eureka注册中心配置单节点时,将自己注册到Eureka和拉取注册中心配置设置为false,要不然启动Eureka会报错。关于多节点配置请百度。
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
register-with-eureka: false # 重点
fetch-registry: false # 重点
- 由于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/
- 在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在经过几天的折腾之后。。终于找到答案了!!!所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复