尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
SpringCloud-服务注册-Eureka
Eureka一、定义1、概念​ Eureka是Netflix开发的服务发现框架本身是一个基于REST的服务主要用于定位运行在AWS域中的中间层服务以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中以实现SpringCloud的服务发现功能。Eureka是AP模式保证可用性和分区容错性2、组成Eureka包含两个组件Eureka Server和Eureka Client。Eureka Server提供服务注册服务各个节点启动后会在Eureka Server中进行注册这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息服务节点的信息可以在界面中直观的看到。Eureka Client是一个java客户端用于简化与Eureka Server的交互客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后Eureka Client将会向Eureka Server发送心跳,默认周期为30秒如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。3、数据同步Eureka Server之间通过复制的方式完成数据的同步Eureka还提供了客户端缓存机制即使所有的Eureka Server都挂掉客户端依然可以利用缓存中的信息消费其他服务的API。综上Eureka通过心跳检查、客户端缓存等机制确保了系统的高可用性、灵活性和可伸缩性。4、自我保护机制在默认配置中Eureka Server在默认90s没有得到客户端的心跳则注销该实例但是往往因为微服务跨进程调用网络通信往往会面临着各种问题比如微服务状态正常但是因为网络分区故障时Eureka Server注销服务实例则会让大部分微服务不可用这很危险因为服务明明没有问题。为了解决这个问题Eureka 有自我保护机制通过在Eureka Server配置如下参数可启动保护机制eureka.server.enable-self-preservationtrue它的原理是当Eureka Server节点在短时间内丢失过多的客户端时可能发送了网络故障那么这个节点将进入自我保护模式不再注销任何微服务当网络故障回复后该节点会自动退出自我保护模式。自我保护模式的架构哲学是宁可放过一个决不可错杀一千二、实践springcloud1、Eureka服务端1、引入jar包dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId/dependency2、yml配置server:port:7001eureka:instance:hostname:eureka7001.com#服务器实例名,因为搭建集群所以做了域名映射client:#false表示不向注册中心注册自己register-with-eureka:false#false表示我就是注册中心我的职责就是维护服务实例并不需要去检索服务fetch-registry:falseservice-url:#设置Eureka Server 交互的地址查询服务和注册服务都需要依赖这个的地址defaultZone:http://eureka7002.com:7002/eureka/# server:# #关闭自我保护机制保证不可用就及时删除掉# enable-self-preservation: false# eviction-interval-timer-in-ms: 2000server:port:7002eureka:instance:hostname:eureka7002.com#服务器实例名client:#false表示不向注册中心注册自己register-with-eureka:false#false表示我就是注册中心我的职责就是维护服务实例并不需要去检索服务fetch-registry:falseservice-url:#设置Eureka Server 交互的地址查询服务和注册服务都需要依赖这个的地址defaultZone:http://eureka7001.com:7001/eureka/3、启动类SpringBootApplicationEnableEurekaServer//启动Eureka服务publicclassEurekaMain7002{publicstaticvoidmain(String[]args){SpringApplication.run(EurekaMain7002.class,args);}}2、Eureka客户端1、jar包dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependency2、ymlserver:port:8001spring:application:name:cloud-payment-servicedatasource:type:com.alibaba.druid.pool.DruidDataSourceusername:rootpassword:1706031120driver-class-name:com.mysql.jdbc.Driverurl:jdbc:mysql://localhost:3306/cloud?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneUTCmybatis:mapper-locations:classpath:mapper/*.xmltype-aliases-package:com.zpc.springcloud.pojoeureka:client:#是否将自己注册到Eureka Server服务中心里register-with-eureka:true#是否从EurekaServer中抓取已有的注册信息单点无所谓但集群必须设置为true才能配合Ribbon使用负载均衡fetch-registry:trueservice-url:#defaultZone: http://localhost:7001/eureka #单机版defaultZone:http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka#集群版instance:instance-id:payment8001prefer-ip-address:true#Eureka客户端向服务端发送心跳的时间间隔单位秒#lease-renewal-interval-in-seconds: 2#Eureka服务端在收到最后一次心跳后等待的时间上限单位秒超时将剔除服务#lease-expiration-duration-in-seconds: 2注其它yml类似3、启动类SpringBootApplicationEnableEurekaClient//启动Eureka客户端 也可发现服务EnableDiscoveryClient//启动服务发现客户端publicclassPaymentMain8001{publicstaticvoidmain(String[]args){SpringApplication.run(PaymentMain8001.class,args);}}注EnableDiscoveryClient和EnableEurekaClient共同点都是能够让注册中心能够发现扫描到改服务。不同点EnableEurekaClient只适用于Eureka作为注册中心EnableDiscoveryClient可以是其他注册中心。4、业务类目录结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x0w7ug53-1606724865578)(https://t-images-1304141946.cos.ap-hongkong.myqcloud.com/blog/image-20201128212300653.png)]controller类Slf4jRestControllerpublicclassPaymentController{/* *通过实例化discoveryClient *可以获得调用的服务一些信息 *getServices() 获得注册在注册中心的服务 *getInstances(String Service) 实例化服务 */ResourceprivateDiscoveryClientdiscoveryClient;ResourceprivatePaymentServicepaymentService;Value(${server.port})privateStringserverPort;PostMapping(/payment/create)publicCommetResultcreate(RequestBodyPaymentpayment){intresultpaymentService.create(payment);log.info(进入创建);if(result0){returnnewCommetResult(200,创建成功,服务端口serverPort,result);}else{returnnewCommetResult(444,创建失败,服务端口serverPort,result);}}GetMapping(/payment/query/{id})publicCommetResultqueryById(PathVariable(id)Longid){log.info(进入查询);PaymentresultpaymentService.getPaymentById(id);if(result!null){returnnewCommetResult(200,查询成功,服务端口serverPort,result);}else{returnnewCommetResult(444,查询失败服务端口serverPort,result);}}GetMapping(/payment/discovery)publicDiscoveryClientdiscovery(){CollectionStringservicesdiscoveryClient.getServices();for(Stringservice:services){log.info(##########service);}CollectionServiceInstanceinstancesdiscoveryClient.getInstances(CLOUD-PAYMENT-SERVICE);for(ServiceInstanceinstance:instances){log.info(**********instance.getHost()\tinstance.getServiceId()\tinstance.getPort());}returndiscoveryClient;}}sql数据库SETFOREIGN_KEY_CHECKS0;-- ------------------------------ Table structure for payment-- ----------------------------DROPTABLEIFEXISTSpayment;CREATETABLEpayment(idbigint(20)NOTNULLAUTO_INCREMENTCOMMENT主键,serialvarchar(200)DEFAULTNULLCOMMENT支付流水号,PRIMARYKEY(id)USINGBTREE)ENGINEInnoDBAUTO_INCREMENT3DEFAULTCHARSETutf8 ROW_FORMATDYNAMICCOMMENT支付表;http://eureka7002.com:7002/http://eureka7001.com:7001/三、调用结构
RELATED

相关推荐

程序性能监控分析工具

程序性能监控分析工具

1. CPU性能分析 gprof 编译:在编译选项中添加 -pg使用:运行可执行文件,结束后本地生成gmon.out文件gmon.out的查看:通过如下命令,将gmon.out转换成可阅读的文本文件; gprof ./exe_main gmon.out > p…

📅 2026/9/23 19:27:19
搭建阿里云服务器,实现服务端与客户端socket数据通信(详细版)

搭建阿里云服务器,实现服务端与客户端socket数据通信(详细版)

文章目录0 引言1. 注册账号、免费申请阿里云服务器2. 配置服务器环境3. 远程连接服务器4. 给服务器传输文件5. 可能出现的问题0 引言 最近在做一个项目,需要用到一个客户端(电脑)监测巡检设备(无人船)的数据&#xff…

📅 2026/9/8 0:30:14
Linux 控制 Bash 输出的格式与颜色

Linux 控制 Bash 输出的格式与颜色

1. Bash 中的转义序列和转义字符转义序列 (escape sequences) 由转义字符&#xff08;Escape character&#xff0c;通常为 “^[” or “<Esc>”&#xff09;和其它字符组成&#xff1a;“<Esc>[FormatCodem”。在 Bash 中&#xff0c;“<Esc>” 可由下列符号…

📅 2026/9/13 6:33:04
MORE NEWS

更多资讯

📰

用IDLE运行第一个Python脚本:Hello World从入门到跑通的完整指南

装好Python之后&#xff0c;很多人对着开始菜单里那几项快捷方式会愣一下&#xff1a;双击“Python 3.x”出来的那个黑窗口到底是干嘛的&#xff1f;这个窗口里输入东西怎么没有反应&#xff1f;其实那个窗口就是IDLE的Python Shell&#xff0c;是你用Python写代码、跑代码最直…

📰

造梦西游3爆率表手写实现指南:3步搞定版本更新API适配

造梦西游3爆率表手写实现指南:3步搞定版本更新API适配 刚把《造梦西游3》的掉落数据接口从 v2.1 升级到 v3.0,我盯着控制台里满屏的 404 Not Found 和 undefined ,头皮发麻。老版本的…

📰

PaddleHub 宝石图像分类实战:SpinalNet_ResNet101(spinalnet_res101_gemstone)模型安装、预测与微调全指南

人工智能大模型微调模型推理服务 【免费下载链接】PaddleFormers PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/pa/PaddleFormers 点击查看 免费下载 导读…

📰

2026最新柠檬云官网避坑指南:3个致命错误让新手代码跑不通

2026最新柠檬云官网避坑指南:3个致命错误让新手代码跑不通 你是不是也遇到过这种绝望时刻?从网上复制了一段看似完美的Python爬虫代码,或者一个Java后台接口,满怀期待地粘贴进IDE,点击运行,结果控制台瞬间红屏,报错信息像天书一样滚…

📰

Play 2.3 迁移指南:从 Play 2.2 平滑升级到 2.3 的完整实战手册

后端Web框架 【免费下载链接】playframework The Community Maintained High Velocity Web Framework For Java and Scala. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/pl/playframework 点击查看 免费下载 本文是 Play Framework 官方 2.2 → 2.3 迁移指南的深度解…

📰

基于WEB的个人知识管理系统架构拆解:Nginx+MongoDB部署实战

简介&#xff1a;基于WEB的个人知识管理系统.zip 是一份面向毕业设计学生及Web开发初学者的完整项目源码包&#xff0c;围绕知识采集、分类、存储、检索与共享等核心模块展开&#xff0c;适合用于课程设计、毕设参考或二次开发练习。压缩包共505个文件&#xff0c;大小21.42MB&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬