分區
對於一個用戶量比較大或者地理位置分佈範圍很廣的項目。跨地區調用時,延時比較大。我們可以通過同一個機房的服務優先調用同一個機房的服務,當本機房的服務不可用的時候,纔會調用其他機房的服務。
Eureka中的分區概念
eureka提供了region和zone兩個概念。
- region: 地區。比如亞洲地區,歐洲地區。
- zone: region內的某個機房。
我的使用案例
幾個同事一起開發一個項目,服務數量比較多,本機開發,啓動所有服務,機器會比較卡。我就考慮大家集中註冊到一個eureka中,但是這樣服務就會互相干擾。但是分區這種配置正好符合我的場景。
我們使用調試服務的時候,就在自己的機器上啓動對應服務,進行調試,這樣會調用自己的服務。
而調用正常的服務的時候,只要有一個人啓動服務,就可以了。我們其他人就也可以調用了。
搭建實例代碼
- application-peer.yml
spring:
application:
# 指定應用的名稱
name: fxb-eureka-superman
server:
port: ${eureka_port:8760}
eureka:
instance:
hostname: fxb-eureka-peer0
# 更趨向IP地址
prefer-ip-address: true
# status-page-url-path: /actuator/info
# health-check-url-path: /actuator/health
secure-virtual-host-name: fxb.com
virtual-host-name: moyang.com
metadata-map:
zone: superman
client:
service-url:
wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
# eureka client 刷新本地刷新時間,默認30s
registry-fetch-interval-seconds: 5
register-with-eureka: true
fetch-registry: true
# 更趨向同一zone的eureka
prefer-same-zone-eureka: true
region: beijing
availability-zones:
beijing: wangxiyue,superman,lipu_f,fengtiecheng,wangxiaowei_dev
server:
# eureka server 刷新read cache Map 的時間
# 注意,client讀取的是readCacheMap,這個時間決定了多久會把readWriteCacheMap的緩存更新到readCacheMap上,默認30秒
response-cache-update-interval-ms: 30000
#eureka server緩存readWriteCacheMap失效時間,這個只有在這個時間過去後緩存纔會失效,失效前不會更新,過期後從registry重新讀取註冊服務信息,registry是一個ConcurrentHashMap。
#由於啓用了evict其實就用不太上改這個配置了
#默認180s
response-cache-auto-expiration-in-seconds: 180
# 啓動主動失效,並且每次主動失效檢測時間間隔爲3s
eviction-interval-timer-in-ms: 3000
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
logging:
level:
root: INFO
- application-peer1.yml
spring:
application:
# 指定應用的名稱
name: fxb-eureka-wangxiyue
server:
port: ${eureka_port:8761}
eureka:
instance:
hostname: fxb-eureka-peer1
# 更趨向IP地址
prefer-ip-address: true
# status-page-url-path: /actuator/info
# health-check-url-path: /actuator/health
secure-virtual-host-name: fxb.com
virtual-host-name: moyang.com
metadata-map:
zone: wangxiyue
client:
service-url:
superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
# eureka client 刷新本地刷新時間,默認30s
registry-fetch-interval-seconds: 5
register-with-eureka: true
fetch-registry: true
# 更趨向同一zone的eureka
prefer-same-zone-eureka: true
region: beijing
availability-zones:
beijing: superman,wangxiyue,lipu_f,fengtiecheng,wangxiaowei_dev
server:
# eureka server 刷新read cache Map 的時間
# 注意,client讀取的是readCacheMap,這個時間決定了多久會把readWriteCacheMap的緩存更新到readCacheMap上,默認30秒
response-cache-update-interval-ms: 30000
#eureka server緩存readWriteCacheMap失效時間,這個只有在這個時間過去後緩存纔會失效,失效前不會更新,過期後從registry重新讀取註冊服務信息,registry是一個ConcurrentHashMap。
#由於啓用了evict其實就用不太上改這個配置了
#默認180s
response-cache-auto-expiration-in-seconds: 180
# 啓動主動失效,並且每次主動失效檢測時間間隔爲3s
eviction-interval-timer-in-ms: 3000
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
logging:
level:
root: INFO
- application-peer2.yml
spring:
application:
# 指定應用的名稱
name: fxb-eureka-lipu_f
server:
port: ${eureka_port:8762}
eureka:
instance:
hostname: fxb-eureka-peer2
# 更趨向IP地址
prefer-ip-address: true
# status-page-url-path: /actuator/info
# health-check-url-path: /actuator/health
secure-virtual-host-name: fxb.com
virtual-host-name: moyang.com
metadata-map:
zone: lipu_f
client:
service-url:
superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
# eureka client 刷新本地刷新時間,默認30s
registry-fetch-interval-seconds: 5
register-with-eureka: true
fetch-registry: true
# 更趨向同一zone的eureka
prefer-same-zone-eureka: true
region: beijing
availability-zones:
beijing: wangxiyue,superman,lipu_f,fengtiecheng,wangxiaowei_dev
server:
# eureka server 刷新read cache Map 的時間
# 注意,client讀取的是readCacheMap,這個時間決定了多久會把readWriteCacheMap的緩存更新到readCacheMap上,默認30秒
response-cache-update-interval-ms: 30000
#eureka server緩存readWriteCacheMap失效時間,這個只有在這個時間過去後緩存纔會失效,失效前不會更新,過期後從registry重新讀取註冊服務信息,registry是一個ConcurrentHashMap。
#由於啓用了evict其實就用不太上改這個配置了
#默認180s
response-cache-auto-expiration-in-seconds: 180
# 啓動主動失效,並且每次主動失效檢測時間間隔爲3s
eviction-interval-timer-in-ms: 3000
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
logging:
level:
root: INFO
- application-peer3.yml
spring:
application:
# 指定應用的名稱
name: fxb-eureka-fengtiecheng
server:
port: ${eureka_port:8763}
eureka:
instance:
hostname: fxb-eureka-peer3
# 更趨向IP地址
prefer-ip-address: true
# status-page-url-path: /actuator/info
# health-check-url-path: /actuator/health
secure-virtual-host-name: fxb.com
virtual-host-name: moyang.com
metadata-map:
zone: fengtiecheng
client:
service-url:
superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
# eureka client 刷新本地刷新時間,默認30s
registry-fetch-interval-seconds: 5
register-with-eureka: true
fetch-registry: true
# 更趨向同一zone的eureka
prefer-same-zone-eureka: true
region: beijing
availability-zones:
beijing: lipu_f,superman,wangxiyue,fengtiecheng,wangxiaowei_dev
server:
# eureka server 刷新read cache Map 的時間
# 注意,client讀取的是readCacheMap,這個時間決定了多久會把readWriteCacheMap的緩存更新到readCacheMap上,默認30秒
response-cache-update-interval-ms: 30000
#eureka server緩存readWriteCacheMap失效時間,這個只有在這個時間過去後緩存纔會失效,失效前不會更新,過期後從registry重新讀取註冊服務信息,registry是一個ConcurrentHashMap。
#由於啓用了evict其實就用不太上改這個配置了
#默認180s
response-cache-auto-expiration-in-seconds: 180
# 啓動主動失效,並且每次主動失效檢測時間間隔爲3s
eviction-interval-timer-in-ms: 3000
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
logging:
level:
root: INFO
- application-peer4.yml
spring:
application:
# 指定應用的名稱
name: fxb-eureka-wangxiaowei_dev
server:
port: ${eureka_port:8764}
eureka:
instance:
hostname: fxb-eureka-peer4
# 更趨向IP地址
prefer-ip-address: true
# status-page-url-path: /actuator/info
# health-check-url-path: /actuator/health
secure-virtual-host-name: fxb.com
virtual-host-name: moyang.com
metadata-map:
zone: wangxiaowei_dev
client:
service-url:
superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
# eureka client 刷新本地刷新時間,默認30s
registry-fetch-interval-seconds: 5
register-with-eureka: true
fetch-registry: true
# 更趨向同一zone的eureka
prefer-same-zone-eureka: true
region: beijing
availability-zones:
beijing: fengtiecheng,superman,wangxiyue,lipu_f,wangxiaowei_dev
server:
# eureka server 刷新read cache Map 的時間
# 注意,client讀取的是readCacheMap,這個時間決定了多久會把readWriteCacheMap的緩存更新到readCacheMap上,默認30秒
response-cache-update-interval-ms: 30000
#eureka server緩存readWriteCacheMap失效時間,這個只有在這個時間過去後緩存纔會失效,失效前不會更新,過期後從registry重新讀取註冊服務信息,registry是一個ConcurrentHashMap。
#由於啓用了evict其實就用不太上改這個配置了
#默認180s
response-cache-auto-expiration-in-seconds: 180
# 啓動主動失效,並且每次主動失效檢測時間間隔爲3s
eviction-interval-timer-in-ms: 3000
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
logging:
level:
root: INFO
註冊邏輯
prefer-same-zone-eureka
爲false
, 按照service-url
的list
第一個註冊中心,並和其維持心跳檢測.不會再向list
中的其他註冊中心註冊和維持心跳. 只有在第一個註冊失敗的情況下,纔會依次向其他註冊中心註冊。總共會註冊三次,如果三次都沒有成功,就會註冊失敗。每隔一個心跳時間,就會再次嘗試了。- 如果
prefer-same-zone-eureka
爲true
,先通過region
取availability-zones
內的第一個zone
,然後通過這個zone
取service-url
下的list
,並向list
內的第一個註冊中心進行註冊和維持心跳,不會再向list內的其它的註冊中心註冊和維持心跳。只有在第一個註冊失敗的情況下,纔會依次向其它的註冊中心註冊,總共重試3
次,如果3
個service-url
都沒有註冊成功,則註冊失敗。每隔一個心跳時間,會再次嘗試。
注意
爲了保證服務註冊到同一個zone的註冊中心,一定要注意availability-zones的順序,必須要把同一個zone寫在前面。
如果你覺得寫的還不錯,就關注下公衆號唄,關注後,有點小禮物回贈給你。
你可以獲得5000+電子書,java,springCloud,adroid,python等各種視頻教程,各種軟件的安裝及破解教程。
希望一塊學習,一塊進步!