首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决Eureka默认缓存配置导致时效性问题

解决Eureka默认缓存配置导致时效性问题

原创
作者头像
code-x
修改2022-08-17 15:00:58
6080
修改2022-08-17 15:00:58
举报
文章被收录于专栏:code-xcode-xcode-x

技术架构是Eureka+OpenFeign+Ribbon

开发环境下, 比如A服务调用B服务, B服务更改代码重启后, A服务足足要等上一两分钟才能正常调用到B服务

无疑是浪费生命

在此更改下相关配置解决此问题

Ribbon配置

Ribbon调用这个方法启动了一个定时器, 该定时器定期刷新ribbon内缓存的服务列表

com.netflix.loadbalancer.PollingServerListUpdater#start
# ribbon缓存刷新间隔 改为1s
ribbon.ServerListRefreshInterval=1000

Eureka Client配置

Client会定时向Server获取服务注册信息

同样是定时调用

com.netflix.discovery.DiscoveryClient#initScheduledTasks

通过此参数配置

# 客户端拉取服务器配置信息的周期 改为1s
eureka.client.registry-fetch-interval-seconds=1

此任务实际调用了http://host/eureka/apps/delta这个接口获取服务注册列表, 但这个接口, 同样是有缓存的, 继续看Server配置

Eureka Server配置

Eureka Server存在三个变量: ( registry / readWriteCacheMap / readOnlyCacheMap ) 保存服务注册信息

默认情况下定时任务每30s将readWriteCacheMap同步至readOnlyCacheMap, 每60s清理超过90s未续约的节点, Eureka Client每30s从readOnlyCacheMap获取服务注册信息

# 禁用缓存readOnlyCacheMap, client直接从readWriteCacheMap更新服务注册信息 
eureka.server.use-read-only-response-cache: false

Eureka在此判断是否取缓存

com.netflix.eureka.registry.ResponseCacheImpl#getValue

更改了配置后, B服务启动仅1-2s内就可以被A服务感知到

但这些配置建议仅在开发环境下启用

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ribbon配置
  • Eureka Client配置
  • Eureka Server配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档