【踩坑日常】解决Eureka启动报错:Network level connection to peer localhost;retrying after delay

这篇具有很好参考价值的文章主要介绍了【踩坑日常】解决Eureka启动报错:Network level connection to peer localhost;retrying after delay。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🏆项目场景:

最近在使用Spring Cloud的Eureka服务时,遇到了一个线上问题:Eureka启动一直报错,提示Network level connection to peer localhost;retrying after delay。通过一番排查,发现问题的根本原因竟然是配置文件中的eureka defaultZone未生效,而造成这一情况的直接原因是spring.profiles未正确激活。

ERROR 3144 --- [et_localhost-12] c.n.e.cluster.ReplicationTaskProcessor   : Network level connection to peer localhost; retrying after delay

com.sun.jersey.api.client.ClientHandlerException: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8761 timed out
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
    at com.netflix.eureka.cluster.DynamicGZIPContentEncodingFilter.handle(DynamicGZIPContentEncodingFilter.java:48) ~[eureka-core-1.4.10.jar:1.4.10]
    at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.4.10.jar:1.4.10]
    at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.netflix.eureka.transport.JerseyReplicationClient.submitBatchUpdates(JerseyReplicationClient.java:116) ~[eureka-core-1.4.10.jar:1.4.10]
    at com.netflix.eureka.cluster.ReplicationTaskProcessor.process(ReplicationTaskProcessor.java:71) ~[eureka-core-1.4.10.jar:1.4.10]
    at com.netflix.eureka.util.batcher.TaskExecutors$BatchWorkerRunnable.run(TaskExecutors.java:187) [eureka-core-1.4.10.jar:1.4.10]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_92]
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8761 timed out

✨问题描述

在Eureka配置文件中,我们正常地配置了eureka defaultZone,但在启动应用后却一直报错,无法连接到Eureka服务器。初步怀疑是网络问题,但通过排查发现并非如此。最终,我们锁定了问题根源——spring.profiles未正确激活。

当时配置文件

spring:
  application:
    name: prod_eureka
server:
  port: 8810
security:
    basic:
      enabled: true
    user:
      name: admin
      password: 1q2w3e4r5t6y7U
eureka:
  environment: prod
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 30000
---
spring:
  profiles: jm-citymap-common-prod01
eureka:
  instance:
    hostname: jm-citymap-common-prod01
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://admin:1q2w3e4r5t6y7U@jm-citymap-common-prod02:8810/eureka/


🔎原因分析:

  • defaultZone 配置

从配置文件看并没有出现localhost ,那从哪来的。查询eureka的服务注册发现相关源码剖析
EurekaClientConfigBean

    public EurekaClientConfigBean() {
        this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
		//...
    }

如果defaultZone没配置,默认就是http://localhost:8761/eureka/,而eureka server确实是配置了defaultZone。那会不会是配置的defaultZone 没生效。

  • Profiles 激活

从配置文件发现defaultZone配置是配置到了名为jm-citymap-common-prod01spring profiles 中。如果需要defaultZone 生效,必须激活名为jm-citymap-common-prod01spring profiles
查看配置和启动命令。都没有激活jm-citymap-common-prod01


✌解决方案:

在启动命令上加-Dspring.profiles.active=jm-citymap-common-prod01,激活jm-citymap-common-prod01.

nohup java -jar -Xms512m -Xmx512m -Dspring.profiles.active=jm-citymap-common-prod01 cloud-eureka.jar /opt/app/eureka/logs/ 2>&1 &

📜相关补充

Spring Profiles介绍

在 Spring Framework 中,Profile 是一种用于定义一组 Bean 定义和配置的机制,这些 Bean 定义和配置仅在特定的运行时环境或应用程序配置下生效。通过使用 Profile,你可以根据应用程序运行的环境,如开发环境、测试环境、生产环境等,来灵活地管理不同的配置。

在 Spring 中,可以通过以下方式使用 Profile:

  • 在 XML 配置文件中使用 Profile
<beans>
    <!-- Common bean definitions -->

    <beans profile="dev">
        <!-- Bean definitions for development environment -->
    </beans>

    <beans profile="prod">
        <!-- Bean definitions for production environment -->
    </beans>
</beans>

  • 在注解配置中使用 Profile
@Configuration
public class AppConfig {

    @Bean
    @Profile("dev")
    public DataSource dataSourceDev() {
        // DataSource for development environment
    }

    @Bean
    @Profile("prod")
    public DataSource dataSourceProd() {
        // DataSource for production environment
    }
}

  • 在属性文件中使用 Profile
# Common properties

---
spring:
  profiles: dev
# Properties for development environment

---
spring:
  profiles: prod
# Properties for production environment

profiles的激活方式

在Spring中,有多种方式可以激活profiles。以下是其中常用的几种方式:

  • 命令行参数,在运行时使用-Dspring.profiles.active参数来指定激活的profile
java -jar your-application.jar -Dspring.profiles.active=dev
  • 配置文件,在application.properties或者application.yml中直接配置
spring.profiles.active=dev
  • 在代码中激活,在启动类或者配置类中通过Java代码来激活profiles
@SpringBootApplication
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(YourApplication.class);
        application.setAdditionalProfiles("dev");
        application.run(args);
    }
}

😜小结

通过这次问题的排查和解决,深刻认识到了Spring Profiles的重要性。在项目开发中,合理使用Profiles能够更好地适应不同的环境,提高系统的灵活性和可维护性。同时,在配置Eureka时,确保eureka defaultZone正确配置也是至关重要的。文章来源地址https://www.toymoban.com/news/detail-773237.html

到了这里,关于【踩坑日常】解决Eureka启动报错:Network level connection to peer localhost;retrying after delay的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 报错处理:解决Linux上Docker启动报错:Cannot connect to the Docker daemon

    嗨,大家好!今天我来分享一个我在运维过程中遇到的问题,关于Linux上Docker启动时出现的“Cannot connect to the Docker daemon”报错,以及如何解决这个问题的。 首先,让我们来看看这个报错信息。当你在启动Docker时,如果你看到类似以下的错误信息: 这意味着Docker无法连接到

    2024年02月05日
    浏览(39)
  • 项目启动 zookeeper 报错 java.net.ConnectException: Connection refused: no further information 解决问题思路分析

    项目启动不停的刷 java.net.ConnectException: Connection refused: no further information 链接被拒绝如下: 开始排查问题: 1.首先查看代码是不是有人提交了本地配置到仓库,导致自己配置文件无法读取到自己本地的配置文件,导致链接超时,链接不上zookeeper的服务 本地配置文件读取的还是本地的

    2024年02月16日
    浏览(33)
  • 【已解决】Docker启动失败,报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock.

    报错原因: 无法与Docker守护进程建立连接。 守护进程负责管理Docker容器和镜像,并提供对Docker API的访问。 解决措施: 输入以下代码,重启docker服务 验证成功: 1. 输入以下代码,则会出现容器相关信息 2. 如果 步骤1 发现容器信息为空。 需要跳到4-6,最后 再返回步骤3!

    2024年02月09日
    浏览(39)
  • Docker启动失败,报错Cannot connect to the Docker daemon at unix:///var/run/docker 完美解决方案

    问题说明: 在构建docker镜像时发生报错: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 解决方案: 查看docker状态: 解决方案:设置开启Linux时docker自启动。 然后重启虚拟机即可解决问题。

    2024年02月06日
    浏览(37)
  • npm安装报错: errno ETIMEDOUT network request toXXX failed, reason: connect ETIMEDOUT

    今天执行这段安装报错: npm WARN using --force I sure hope you know what you are doing. npm ERR! errno ETIMEDOUT npm ERR! network request to http://registry.npmjs.org/html2canvas failed, reason: connect ETIMEDOUT 104.16.17.35:80 npm ERR! network This is a problem related to network connectivity. npm ERR! network In most cases you are behind a proxy

    2024年02月16日
    浏览(35)
  • post请求报错 net::ERR_CONNECTION_REFUSED AxiosError code: “ERR_NETWORK“

    post请求接口报错net::ERR_CONNECTION_REFUSED,AxiosError中 code: \\\"ERR_NETWORK\\\"。百度了有说跨域有说请求格式不对,我的跨域已经在nodejs中设置了cors,还是不知道什么原因 查看network发现请求了两次接口,百度说 strict-origin-when-cross-origin 跨域报错,按照说的操作还是不行  最后看是请求头

    2024年02月11日
    浏览(28)
  • Centos 8 网卡connect: Network is unreachable错误解决办法

    现象1、ifconfig没有ens160配置 [test@localhost ~]$ ifconfig  lo: flags=73UP,LOOPBACK,RUNNING  mtu 65536         inet 127.0.0.1  netmask 255.0.0.0         inet6 ::1  prefixlen 128  scopeid 0x10host         loop  txqueuelen 1000  (Local Loopback)         RX packets 4  bytes 240 (240.0 B)         RX errors 0  dropped 0  overr

    2024年02月12日
    浏览(33)
  • MobaXterm连接出现 Network error: Connection timed out 问题解决

    MobaXterm连接出现 Network error: Connection timed out: 接前文:CentOS安装, 点此查看文章,安装之后的SSH连接: 解决思路如下: 1、检查虚拟机端是否安装ssh 一般情况是可以自动安装的,直接在终端输入ssh,即可进行测试,如果没有此命令的话会提示command not find,需要执行如下命令

    2023年04月17日
    浏览(31)
  • Docker 启动容器报错: Error response from daemon: network XXX not found

    以上为报错信息,之前的桥接这些都是配置好的。 解决方案: 即可解决。 场景:         在做生产上线的时候,之前docker启动的gitlab,突然端口不能被访问到了,查看了对应服务器监听端口也没问题。可以ping通,telnet端口就是不通。着急上线,最后不得不重启服务器,重

    2024年02月12日
    浏览(49)
  • 成功解决: Client network socket disconnected before secure TLS connection was established

    在项目中安装使用Avue的时候报错了、特此记录 在要安装的后边添加上: cnpm --registry=https://registry.npm.taobao.org 举例

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包