如何完全剔除对Eureka的依赖,报错Cannot execute request on any known server

news/2024/12/25 10:24:13 标签: eureka

【现象】

程序运行报错如下:

com.netflix.discovery.shared.transport.TransportException报错Cannot execute request on any known server

【解决方案】

(1)在Maven工程中的pom去掉Eureka相关的引用(注释以下部分)

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-eureka</artifactId>

</dependency>

(2)在工程中搜索,org.springframework.cloud.netflix.eureka相关的import引用

(3)服务器上,打包的jar或者在lib/等目录下,删除如下jar包(否则还是会一直打印错误日志,具体原因参见原因分析)

spring-cloud-starter-netflix-eureka.xxxxxx.jar

spring-cloud-netflix-eureka-client.xxxxxx.jar

【原因分析】

主要分析一下Eureka是如何注册成为Spring中Bean的,在Spring中会调用finishRefresh()方法,代码如下:

protected void finishRefresh() {

  // Clear context-level resource caches (such as ASM metadata from scanning).
   //清空缓存
  clearResourceCaches();

  // Initialize lifecycle processor for this context.
   //初始化一个LifecycleProcessor,在Spring启动的时候启动bean,在spring结束的时候销毁bean
  initLifecycleProcessor();

  // Propagate refresh to lifecycle processor first.
    //调用LifecycleProcessor的onRefresh方法,启动实现了Lifecycle接口的bean
  getLifecycleProcessor().onRefresh();

  // Publish the final event.
   //发布ContextRefreshedEvent
  publishEvent(new ContextRefreshedEvent(this));

  // Participate in LiveBeansView MBean, if active.
   //注册MBean,通过JMX进行监控和管理
  LiveBeansView.registerApplicationContext(this);
}

        重点关注 getLifecycleProcessor().onRefresh() ,它是调用生命周期处理器的onrefresh方法,找到SmartLifecycle接口的所有实现类并调用start方法。
  其调用链路为:DefaultLifecycleProcessor.startBean -> start() -> doStart() -> bean.start()

        而Eureka中,正是利用这个机制,而对应的类就是 EurekaAutoServiceRegistration(在spring-cloud-starter-netflix-eureka.xxxxxx.jar里),就实现了 SmartLifeCycle,服务注册自动配置类。

        此处就不对Eureka原理进行分析了,贴图一张供大家参考(有兴趣的自行调试代码)


http://www.niftyadmin.cn/n/5798984.html

相关文章

【进阶编程】代理模式和适配模式的比较

代理模式和适配器模式(Adapter Pattern)都属于结构型设计模式,它们在某些方面有相似之处,都涉及到为其他对象提供间接访问和包装,但它们的核心目的是不同的。下面是对代理模式和适配器模式的详细比较: 1. 目的 代理模式(Proxy Pattern): 代理模式的目的是通过一个代理…

微软在AI时代的战略布局和挑战

微软的CEO萨提亚纳德拉&#xff08;Satya Nadella&#xff09;在与投资人比尔格里&#xff08;Bill Gurley&#xff09;和布拉德格斯特纳&#xff08;Brad Gerstner&#xff09;的一场深度对话中&#xff0c;详细回顾了微软在AI时代的战略布局与所面临的挑战。这场对话不仅总结…

【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(一):从电梯出发的状态模式State Pattern

前言 &#xff08;题外话&#xff09;nav2系列教材&#xff0c;yolov11部署,系统迁移教程我会放到年后一起更新&#xff0c;最近年末手头事情多&#xff0c;还请大家多多谅解。回顾我们整个学习历程&#xff0c;我们已经学习了很多C的代码特性&#xff0c;也学习了很多ROS2的跨…

五十一:HPACK如何减少HTTP头部的大小?

在现代的Web通信中&#xff0c;HTTP是最常用的协议。然而&#xff0c;随着网络应用程序的复杂化&#xff0c;HTTP头部的大小迅速增加&#xff0c;尤其是在HTTP/2中&#xff0c;由于其多路复用特性&#xff0c;多个请求和响应共享同一个连接&#xff0c;头部大小对性能的影响变得…

突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除

GitLab停止为中国大陆、香港和澳门地区提供服务&#xff0c;要求用户在60天内迁移账号&#xff0c;否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息&#xff1a; 1. 背景介绍&#xff1a;GitLab是一家全球知名的软件开发平台&#xff0c;提供代码托…

物理层知识要点

文章目录 物理层接口的四大特性通信基础编码和调制&#xff08;1&#xff09;数字数据编码为数字信号&#xff08;2&#xff09;模拟数据编码为数字信号&#xff08;3&#xff09;常见调制方式&#xff08;3&#xff09;信道的极限容量 多路复用技术数据传输方式物理层下的传输…

leetcode 05 回文字符串

leetcode 05 回文字符串 1. 描述 给你一个字符串&#xff0c;找到里面最长的回文字符串 2. 事例 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。示例 2&#xff1a; …

美国加州房价数据分析01

1.项目简介 本数据分析项目目的是分析美国加州房价数据&#xff0c;预测房价中值。 环境要求&#xff1a; ancondajupyter notebookpython3.10.10 虚拟环境&#xff1a; pandas 2.1.1 numpy 1.26.1 matplotlib 3.8.0 scikit-learn1.3.1 2. 导入并探索数据集 通用的数据分析…