一、介绍
·如果 header 存在,则使用这个 header 标识的命名空间进行服务注册发现的隔离。
·如果 header 不存在或者值为空,则使用默认的命名空间default。
二、示例
下面通过 eureka 协议的api进行说明。向命名空间ns1下注册服务EUREKA-DEMO-PROVIDER的一个实例,实例端口为18081。
curl -X 'POST' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Content-type: application/json" \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-d '{ "instance": { "instanceId": "10.91.80.100:eureka-demo-provider:18081", "hostName": "10.91.80.100", "app": "EUREKA-DEMO-PROVIDER", "ipAddr": "10.91.80.100", "status": "UP", "overriddenStatus": "UNKNOWN", "port": { "$": 18081, "@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": { "management.port": "18081" }, "homePageUrl": "http://10.91.80.100:18081/", "statusPageUrl": "http://10.91.80.100:18081/actuator/info", "healthCheckUrl": "http://10.91.80.100:18081/actuator/health", "vipAddress": "EUREKA-DEMO-PROVIDER", "secureVipAddress": "EUREKA-DEMO-PROVIDER", "isCoordinatingDiscoveryServer": "false", "lastUpdatedTimestamp": "1681266990026", "lastDirtyTimestamp": "1681266990889" }}' \\-v
向命名空间ns2下注册服务EUREKA-DEMO-PROVIDER的一个实例,实例端口为18082。
curl -X 'POST' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Content-type: application/json" \\-H "Accept: application/json" \\-H "x-namespace: ns2" \\-d '{ "instance": { "instanceId": "10.91.80.100:eureka-demo-provider:18082", "hostName": "10.91.80.100", "app": "EUREKA-DEMO-PROVIDER", "ipAddr": "10.91.80.100", "status": "UP", "overriddenStatus": "UNKNOWN", "port": { "$": 18082, "@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": { "management.port": "18082" }, "homePageUrl": "http://10.91.80.100:18082/", "statusPageUrl": "http://10.91.80.100:18082/actuator/info", "healthCheckUrl": "http://10.91.80.100:18082/actuator/health", "vipAddress": "EUREKA-DEMO-PROVIDER", "secureVipAddress": "EUREKA-DEMO-PROVIDER", "isCoordinatingDiscoveryServer": "false", "lastUpdatedTimestamp": "1681266990026", "lastDirtyTimestamp": "1681266990889" }}' \\-v
查询ns1下EUREKA-DEMO-PROVIDER的实例。
curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v## 返回18081端口实例
查询ns2下EUREKA-DEMO-PROVIDER的实例。
curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns2" \\-v## 返回18082端口实例
如上所见,向不同命名空间下相同的服务名进行服务注册发现,已经通过命名空间进行隔离。
三、注册服务实例
·请求方法:PUT
·路由:/eureka/apps/{appId}
·示例:
curl -X 'POST' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Content-type: application/json" \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-d '{ "instance": { "instanceId": "10.91.80.100:eureka-demo-provider:18081", "hostName": "10.91.80.100", "app": "EUREKA-DEMO-PROVIDER", "ipAddr": "10.91.80.100", "status": "UP", "overriddenStatus": "UNKNOWN", "port": { "$": 18081, "@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": { "management.port": "18081" }, "homePageUrl": "http://10.91.80.100:18081/", "statusPageUrl": "http://10.91.80.100:18081/actuator/info", "healthCheckUrl": "http://10.91.80.100:18081/actuator/health", "vipAddress": "EUREKA-DEMO-PROVIDER", "secureVipAddress": "EUREKA-DEMO-PROVIDER", "isCoordinatingDiscoveryServer": "false", "lastUpdatedTimestamp": "1681266990026", "lastDirtyTimestamp": "1681266990889" }}' \\-v
四、健康检查
·请求方法:PUT
·路由:/eureka/apps/{appId}/{instanceId}
·示例:
curl -X 'PUT' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081' \\-H "x-namespace: ns1" \\-v
五、取消注册
·请求方法:DELETE
·路由:/eureka/apps/{appId}/{instanceId}
·示例:
curl -X 'DELETE' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081' \\-H "x-namespace: ns1" \\-v
六、查询所有实例
·请求方法:GET
·路由:/eureka/apps
·示例:
curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v
七、查询 delta 实例
·请求方法:GET
·路由:/eureka/apps/delta
·示例:
curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/delta' \\-H "Accept: application/json" \\-v
八、查询某个服务下所有实例
·请求方法:GET
·路由:/eureka/apps/{appId}
·示例:
curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v
九、查询某个服务下某个实例
·请求方法:GET
·路由:/eureka/apps/{appId}/{instanceId}
·示例:
curl -X 'GET' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v
十、查询某个实例
·请求方法:GET
·路由:/eureka/instance/{instanceId}
·示例:
curl -X 'GET' 'http://127.0.0.1:8761/eureka/instance/10.91.80.100:eureka-demo-provider:18081' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v
十一、查询 vip 下的所有实例
·请求方法:GET
·路由:/eureka/vips/{vip}
·示例:
curl -X 'GET' 'http://127.0.0.1:8761/eureka/vips/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v
十二、查询 secure vip 下的所有实例
·请求方法:GET
·路由:/eureka/svips/{svip}
·示例
curl -X 'GET' 'http://127.0.0.1:8761/eureka/svips/EUREKA-DEMO-PROVIDER' \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-v
十三、强制隔离实例
·请求方法:PUT
·路由:/eureka/apps/{appId}/{instanceId}/status
·示例
curl -X 'PUT' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081/status' \\-H "x-namespace: ns1" \\-v
十四、关闭强制隔离
·请求方法:DELETE
·路由:/eureka/apps/{appId}/{instanceId}/status
·示例
curl -X 'DELETE' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081/status' \\-H "x-namespace: ns1" \\-v
十五、更新元数据
·请求方法:PUT
·路由:/eureka/apps/{appId}/{instanceId}/metadata?{key}={value}
·示例
curl -X 'PUT' 'http://127.0.0.1:8761/eureka/apps/EUREKA-DEMO-PROVIDER/10.91.80.100:eureka-demo-provider:18081/metadata?k=v' \\-H "x-namespace: ns1" \\-v
十六、批量复制
·请求方法:POST
·路由:/eureka/peerreplication/batch
·示例
curl -X 'POST' 'http://127.0.0.1:8761/eureka/peerreplication/batch' \\-H "Content-type: application/json" \\-H "Accept: application/json" \\-H "x-namespace: ns1" \\-d '{ "replicationList":[ { "appName": "EUREKA-DEMO-PROVIDER", "id": "10.91.80.100:eureka-demo-provider:18081", "lastDirtyTimestamp": 1681266990889, "overriddenStatus": "UNKNOWN", "status": "UP", "instanceInfo": { "instanceId": "10.91.80.100:eureka-demo-provider:18081", "hostName": "10.91.80.100", "app": "EUREKA-DEMO-PROVIDER", "ipAddr": "10.91.80.100", "status": "UP", "overriddenStatus": "UNKNOWN", "port": { "$": 18081, "@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": { "management.port": "18081" }, "homePageUrl": "http://10.91.80.100:18081/", "statusPageUrl": "http://10.91.80.100:18081/actuator/info", "healthCheckUrl": "http://10.91.80.100:18081/actuator/health", "vipAddress": "EUREKA-DEMO-PROVIDER", "secureVipAddress": "EUREKA-DEMO-PROVIDER", "isCoordinatingDiscoveryServer": "false", "lastUpdatedTimestamp": "1681266990026", "lastDirtyTimestamp": "1681266990889" }, "action": "Register" } ]}' \\-v