Spirng Eureka 默認配置解讀緩存
默認的Spring Eureka服務器,服務提供者和服務調用者配置不夠靈敏,老是服務提供者在停掉好久以後,服務調用者很長時間並無感知到變化。或者是服務已經註冊上去了,可是服務調用方很長時間仍是調用不到,發現不了這個服務。服務器
Spring Eureka 默認配置下:spa
描述以下:code
服務提供者和服務調用者配置不夠靈敏,老是服務提供者在停掉好久以後,服務調用者很長時間並無感知到變化的緣由:
EurekaServer本身的ReadWriteMap緩存失效延遲,刷新到ReadOnlyMap的延遲,服務調用者本身本地緩存刷新的延遲。server
服務已經註冊上去了,可是服務調用方很長時間仍是調用不到,發現不了這個服務:
刷新到ReadOnlyMap的延遲,服務調用者本身本地緩存刷新的延遲blog
EurekaServer修改以下配置:it
1 #eureka server刷新readCacheMap的時間,注意,client讀取的是readCacheMap,這個時間決定了多久會把readWriteCacheMap的緩存更新到readCacheMap上 2 #默認30s 3 eureka.server.responseCacheUpdateIntervalMs=3000 4 #eureka server緩存readWriteCacheMap失效時間,這個只有在這個時間過去後緩存纔會失效,失效前不會更新,過時後從registry從新讀取註冊服務信息,registry是一個ConcurrentHashMap。 5 #因爲啓用了evict其實就用不太上改這個配置了 6 #默認180s 7 eureka.server.responseCacheAutoExpirationInSeconds=180 8 9 #啓用主動失效,而且每次主動失效檢測間隔爲3s 10 eureka.server.eviction-interval-timer-in-ms=3000
Eureka服務提供方修改以下配置:io
1 #服務過時時間配置,超過這個時間沒有接收到心跳EurekaServer就會將這個實例剔除 2 #注意,EurekaServer必定要設置eureka.server.eviction-interval-timer-in-ms不然這個配置無效,這個配置通常爲服務刷新時間配置的三倍 3 #默認90s 4 eureka.instance.lease-expiration-duration-in-seconds=15 5 #服務刷新時間配置,每隔這個時間會主動心跳一次 6 #默認30s 7 eureka.instance.lease-renewal-interval-in-seconds=5!
Eureka服務調用方修改以下配置:class
1 #eureka client刷新本地緩存時間 2 #默認30s 3 eureka.client.registryFetchIntervalSeconds=5 4 #eureka客戶端ribbon刷新時間 5 #默認30s 6 ribbon.ServerListRefreshInterval=5000