- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
动态感知Nacos服务地址和ribbon远程调⽤优雅
上下线
背景
远程调⽤⼀般都会⽤ribbon,尽管使⽤feign,还是⽤的ribbon做的负载均衡,远程调⽤。但是ribbon
会每隔30s刷新注册表信息,这样就会导致如果服务下线了,由于注册表没有及时更新,那远程调⽤就
会报错。
ribbon默认实现如下。
om.netflix.loadbalaner.PollingServerListUpdater这个类是ribbon更新注册表的
核⼼类。
nacos动态更新地址原理
Nacos客⼾端中有⼀个HostReactor类,它的功能是实现服务的动态更新,基本原理是:
•客⼾端发起时间订阅后,在HostReactor中有⼀个UpdateTask线程,每10s发送⼀次Pull请求,获
得服务端必威体育精装版的地址列表
•对于服务端,它和服务提供者的实例之间维持了⼼跳检测,⼀旦服务提供者出现异常,则会发送⼀
个Push消息给Nacos客⼾端,也就是服务端消费者
•服务消费者收到请求之后,使⽤HostReactor中提供的processServiceJSON解析消息,并更新本地
服务地址列表
改造ribbon默认更新策略
基于上⾯的理论,是不是可以监听nacos事件更新事件,如果有更新,就重新刷新下ribbon的注册表。
1.覆盖ServerListUpdater,⾃⼰定义⼀个NacosDynamicServerListUpdater代码如下;
1publilassNaosDynamiServerListUpdaterimplementsServerListUpdater{
2privatestatiLoggerlog=LoggerFatory.getLogger(NaosDynamiServerListUp
3
4privateCopyOnWriteArrayListLBUpdaterlbUpdaters=newCopyOnWriteArrayLis
5
6privateNamingServienamingServie;
7
8@Value(${ribbon.PollingServerListUpdater.initial-delay:1000})
9privatelonginitialDelay;
10@Value(${ribbon.PollingServerListUpdater.refresh-interval:30000})
11privatelongrefreshInterval;
12
13privateNaosDisoveryPropertiesproperties;
14
15publiNaosDynamiServerListUpdater(NamingServienamingServie,NaosDiso
16this.namingServie=namingServie;
17this.properties=properties;
18}
19
20@Override
21publivoidstart(UpdateAtionupdateAtion){
22NaosDynamiServerListUpdater.LBUpdaterlbUpdater=newNaosDynamiServ
23this.lbUpdaters.add(lbUpdater);
24lbUpdater.start();
25log.info(naosdslu-started:{},lbUpdater:{},PollingServerListUpdate
26newObjet[]{this,lbUpdater.getIdentity(),this.initialDelay,t
27}
28
29@Override
您可能关注的文档
- 单元测试技术方案.pdf
- junit+mockito单元测试基本用法.pdf
- 高并发编程技术点.pdf
- sentinel方案(带控制台dashboard).pdf
- 利用logId追踪请求链路日志 V1.0.pdf
- DDD领域驱动设计.pdf
- 设计模式手册.pdf
- Apifox新手快速上手.pdf
- GitLab服务如何高效集成Hooks.pdf
- 群发短信去重方案.pdf
- 大学生职业规划大赛《新闻学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《应用统计学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《中医学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《信息管理与信息系统专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《汽车服务工程专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《水产养殖学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《市场营销专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐表演专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
精通系统架构设计,能够设计可扩展、高效、安全的系统。 面对复杂问题时,能够运用创造性思维找到解决方案。 带领团队落地多个大型项目。
文档评论(0)