eureka服务端与客户端交互分析图
客户端行为
- 客户端启动按照配置的eureka节点列表,注册自己到服务端,按照节点列表提供的服务地址轮询,注册成功为止
- 每30秒发送一次心跳,告诉服务端, 我还活着,I am still living
- 拉取服务端所有注册成功的实例列表,每30秒问一次服务端,有更新的实例么?告诉我,我本地也更新一下
服务端行为
- 启动时,找一下自己的临近对等节点,把所有注册实例给我一份,然后自己放到自己的注册表里
- 每30秒检查一下自己的注册表信息,有没有过期的节点,是否触发了自我保护,触发了则不能剔除,否则按策略随机剔除
- 自己处理好后,通知一下自己的伙伴【对等节点】,我这边更新了 你们也更新一下
分析过程中抓包的一些数据,可以参考一下,对于自己的理解有个很好的对比,需要配置一下代理
续约
PUT /eureka/apps/EUREKA-SERVER/10.10.11.9:8082?status=UP&lastDirtyTimestamp=1544159712387 HTTP/1.1
DiscoveryIdentity-Name DefaultClient
DiscoveryIdentity-Version 1.4
DiscoveryIdentity-Id 10.10.11.9
Accept-Encoding gzip
Content-Length 0
Host 10.177.14.9:28721
User-Agent Java-EurekaClient/v1.6.2
Authorization Basic ZGRzaHVhaToxMjM0NTY=
Connection keep-alive
注册
POST /eureka/apps/EUREKA-SERVER HTTP/1.1
Accept-Encoding gzip
Content-Type application/json
Accept application/json
DiscoveryIdentity-Name DefaultClient
DiscoveryIdentity-Version 1.4
DiscoveryIdentity-Id 10.10.11.9
Content-Length 877
Host 10.177.14.9:28721
User-Agent Java-EurekaClient/v1.6.2
Authorization Basic ZGRzaHVhaToxMjM0NTY=
Connection keep-alive
{
"instance": {
"instanceId": "10.10.11.9:8082",
"hostName": "10.10.11.9",
"app": "EUREKA-SERVER",
"ipAddr": "10.10.11.9",
"status": "DOWN",
"overriddenstatus": "UNKNOWN",
"port": {
"$": 8082,
"@enabled": "true"
},
"securePort": {
"$": 443,
"@enabled": "false"
},
"countryId": 1,
"dataCenterInfo": {
"@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
"name": "MyOwn"
},
"leaseInfo": {
"renewalIntervalInSecs": 30,
"durationInSecs": 90,
"registrationTimestamp": 0,
"lastRenewalTimestamp": 0,
"evictionTimestamp": 0,
"serviceUpTimestamp": 0
},
"metadata": {
"@class": "java.util.Collections$EmptyMap"
},
"homePageUrl": "http://10.10.11.9:8082/",
"statusPageUrl": "http://10.10.11.9:8082/info",
"healthCheckUrl": "http://10.10.11.9:8082/health",
"vipAddress": "eureka-server",
"secureVipAddress": "eureka-server",
"isCoordinatingDiscoveryServer": "false",
"lastUpdatedTimestamp": "1544159697067",
"lastDirtyTimestamp": "1544164155198"
}
}
获取变更的服务列表信息
GET /eureka/apps/delta HTTP/1.1
Accept application/json
DiscoveryIdentity-Name DefaultClient
DiscoveryIdentity-Version 1.4
DiscoveryIdentity-Id 10.10.11.9
Accept-Encoding gzip
Host 10.177.14.9:28721
User-Agent Java-EurekaClient/v1.6.2
Authorization Basic ZGRzaHVhaToxMjM0NTY=
Connection keep-alive
{
"applications": {
"versions__delta": "167299",
"apps__hashcode": "UP_20_",
"application": []
}
}
对等节点信息复制
POST /eureka/peerreplication/batch/ HTTP/1.1
Accept application/json
Content-Type application/json
DiscoveryIdentity-Name DefaultServer
DiscoveryIdentity-Version 1.0
DiscoveryIdentity-Id 10.10.11.9
Accept-Encoding gzip
Content-Length 1026
Host 10.177.14.9:28721
User-Agent Java-EurekaClient-Replication/v1.6.2
Authorization Basic ZGRzaHVhaToxMjM0NTY=
Connection keep-alive
{
"replicationList": [{
"appName": "ZUUL-DEV",
"id": "10.10.11.9:28723",
"lastDirtyTimestamp": 1544160168179,
"status": "UP",
"instanceInfo": {
"instanceId": "10.10.11.9:28723",
"hostName": "10.10.11.9",
"app": "ZUUL-DEV",
"ipAddr": "10.10.11.9",
"status": "UP",
"overriddenstatus": "UNKNOWN",
"port": {
"$": 28723,
"@enabled": "true"
},
"securePort": {
"$": 443,
"@enabled": "false"
},
"countryId": 1,
"dataCenterInfo": {
"@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
"name": "MyOwn"
},
"leaseInfo": {
"renewalIntervalInSecs": 30,
"durationInSecs": 90,
"registrationTimestamp": 0,
"lastRenewalTimestamp": 0,
"evictionTimestamp": 0,
"serviceUpTimestamp": 0
},
"metadata": {
"@class": "java.util.Collections$EmptyMap"
},
"homePageUrl": "http://10.10.11.9:28723/",
"statusPageUrl": "http://10.10.11.9:28723/info",
"healthCheckUrl": "http://10.10.11.9:28723/health",
"vipAddress": "zuul-dev",
"secureVipAddress": "zuul-dev",
"isCoordinatingDiscoveryServer": "false",
"lastUpdatedTimestamp": "1544160173786",
"lastDirtyTimestamp": "1544160168179",
"actionType": "ADDED"
},
"action": "Register"
}]
}
获取所有注册实例
GET /eureka/apps/ HTTP/1.1
Accept application/json
DiscoveryIdentity-Name DefaultClient
DiscoveryIdentity-Version 1.4
DiscoveryIdentity-Id 10.10.11.9
Accept-Encoding gzip
Host 10.10.11.9:8082
User-Agent Java-EurekaClient/v1.6.2
Authorization Basic ZGRzaHVhaToxMjM0NTY=
Connection keep-alive
{
"applications": {
"versions__delta": "1",
"apps__hashcode": "UP_1_",
"application": [{
"name": "ZUUL-DEV",
"instance": [{
"instanceId": "10.10.11.9:28723",
"hostName": "10.10.11.9",
"app": "ZUUL-DEV",
"ipAddr": "10.10.11.9",
"status": "UP",
"overriddenstatus": "UNKNOWN",
"port": {
"$": 28723,
"@enabled": "true"
},
"securePort": {
"$": 443,
"@enabled": "false"
},
"countryId": 1,
"dataCenterInfo": {
"@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
"name": "MyOwn"
},
"leaseInfo": {
"renewalIntervalInSecs": 30,
"durationInSecs": 90,
"registrationTimestamp": 1544160173785,
"lastRenewalTimestamp": 1544160173785,
"evictionTimestamp": 0,
"serviceUpTimestamp": 1544160173786
},
"metadata": {
"@class": "java.util.Collections$EmptyMap"
},
"homePageUrl": "http://10.10.11.9:28723/",
"statusPageUrl": "http://10.10.11.9:28723/info",
"healthCheckUrl": "http://10.10.11.9:28723/health",
"vipAddress": "zuul-dev",
"secureVipAddress": "zuul-dev",
"isCoordinatingDiscoveryServer": "false",
"lastUpdatedTimestamp": "1544160173786",
"lastDirtyTimestamp": "1544160168179",
"actionType": "ADDED"
}]
}]
}
}