当前位置: 首页 > article >正文

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

【现象】

程序运行报错如下:

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.kler.cn/a/452100.html

相关文章:

  • Mac上Stable Diffusion的环境搭建(还算比较简单)
  • 勤云远程稿件处理系统 SQL注入漏洞复现(XVE-2024-18393)
  • 2024-12-24 NO1. XR Interaction ToolKit 环境配置
  • RabbitMQ工作模式(详解 工作模式:简单队列、工作队列、公平分发以及消息应答和消息持久化)
  • 记一次Maven拉不了包的问题
  • 【MinIO系列】MinIO Client (mc) 完全指南
  • pytorch nn.Unflatten 和 nn.Flatten模块介绍
  • Chrome 浏览器插件获取网页 iframe 中的 window 对象
  • 【ORB-SLAM3:相机针孔模型和相机K8模型】
  • Chapter 03 复合数据类型-1
  • RBF分类-径向基函数神经网络(Radial Basis Function Neural Network)
  • 数据库安全-redisCouchdb
  • 硬件设计-传输线匹配
  • 3D视觉坐标变换(像素坐标转换得到基于相机坐标系的坐标)
  • 以太网通信--读取物理层PHY芯片的状态
  • C++ 特殊类的设计
  • 开发微信小程序的过程与心得
  • RuoYi-ue前端分离版部署流程
  • mac中idea菜单工具栏没有git图标了
  • 【HarmonyOS NEXT】hdc环境变量配置
  • 认识计算机网络
  • CosyVoice安装过程详解
  • Java基础学习资料
  • Visual Studio - API调试与测试工具之HTTP文件
  • 《战神:诸神黄昏》游戏运行时提示找不到emp.dll怎么办?emp.dll丢失如何修复?
  • 前端开发 -- 自定义鼠标指针样式