可供非 Java 应用程序使用的 Eureka REST 操作。
appID
是应用程序的名称,instanceID
是与实例关联的唯一标识符。在 AWS 云中,instanceID
是实例的实例 ID;在其他数据中心,它是实例的主机名。
对于 XML/JSON,HTTP 的 ACCEPT
类型以及提供的 content-type
必须分别包含 application/xml
或 application/json
。
操作 | HTTP 动作 | 描述 |
---|---|---|
注册新应用程序实例 | POST /eureka/v2/apps/{appID} |
输入: JSON/XML 负载 HTTP 状态码: 成功时返回 204 |
注销应用程序实例 | DELETE /eureka/v2/apps/{appID}/{instanceID} |
HTTP 状态码: 成功时返回 200 |
发送应用程序实例心跳 | PUT /eureka/v2/apps/{appID}/{instanceID} |
HTTP 状态码: * 成功时返回 200 * 如果 instanceID 不存在则返回 404 |
查询所有实例 | GET /eureka/v2/apps |
HTTP 状态码: 成功时返回 200 输出: JSON/XML |
查询特定 appID 的所有实例 | GET /eureka/v2/apps/{appID} |
HTTP 状态码: 成功时返回 200 输出: JSON/XML |
查询特定 appID/instanceID | GET /eureka/v2/apps/{appID}/{instanceID} |
HTTP 状态码: 成功时返回 200 输出: JSON/XML |
查询特定 instanceID | GET /eureka/v2/instances/{instanceID} |
HTTP 状态码: 成功时返回 200 输出: JSON/XML |
将实例移出服务 | PUT /eureka/v2/apps/{appID}/{instanceID}/status?value=OUT_OF_SERVICE |
HTTP 状态码: * 成功时返回 200 * 失败时返回 500 |
将实例移回服务(移除覆盖状态) | DELETE /eureka/v2/apps/{appID}/{instanceID}/status?value=UP |
HTTP 状态码: * 成功时返回 200 * 失败时返回 500 ( value=UP 是可选的,它作为移除覆盖状态后回退状态的建议值) |
更新元数据 | PUT /eureka/v2/apps/{appID}/{instanceID}/metadata?key=value |
HTTP 状态码: * 成功时返回 200 * 失败时返回 500 |
查询特定 vip 地址下的所有实例 | GET /eureka/v2/vips/{vipAddress} |
HTTP 状态码: * 成功时返回 200,输出:JSON/XML * 如果 vipAddress 不存在则返回 404 |
查询特定安全 vip 地址下的所有实例 | GET /eureka/v2/svips/{svipAddress} |
HTTP 状态码: * 成功时返回 200,输出:JSON/XML * 如果 svipAddress 不存在则返回 404 |
注册 (REGISTER)
注册时,需要提交一个符合以下 XSD 的 XML(或 JSON)请求体:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Eureka Instance Registration",
"type": "object",
"required": [
"hostName",
"app",
"ipAddr",
"vipAddress",
"secureVipAddress",
"status",
"securePort",
"homePageUrl",
"statusPageUrl",
"healthCheckUrl",
"dataCenterInfo"
],
"properties": {
"hostName": {
"type": "string",
"description": "在 EC2 中应为公共 DNS 名称(在 EC2 内部解析为私有 IP)"
},
"app": {
"type": "string",
"description": "应用程序名称 (appID)"
},
"ipAddr": {
"type": "string",
"description": "实例的 IP 地址"
},
"vipAddress": {
"type": "string",
"description": "虚拟 IP 地址"
},
"secureVipAddress": {
"type": "string",
"description": "安全虚拟 IP 地址"
},
"status": {
"type": "string",
"enum": ["UP", "DOWN", "STARTING", "OUT_OF_SERVICE", "UNKNOWN"],
"description": "实例状态"
},
"port": {
"type": "integer",
"minimum": 1,
"description": "服务端口(可选)"
},
"securePort": {
"type": "integer",
"minimum": 1,
"description": "安全端口"
},
"homePageUrl": {
"type": "string",
"description": "主页 URL"
},
"statusPageUrl": {
"type": "string",
"description": "状态页 URL"
},
"healthCheckUrl": {
"type": "string",
"description": "健康检查 URL"
},
"dataCenterInfo": {
"type": "object",
"required": ["name"],
"properties": {
"name": {
"type": "string",
"enum": ["MyOwn", "Amazon"],
"description": "数据中心名称"
},
"metadata": {
"type": "object",
"properties": {
"ami-launch-index": {"type": "string"},
"local-hostname": {"type": "string"},
"availability-zone": {"type": "string"},
"instance-id": {"type": "string"},
"public-ipv4": {"type": "string"},
"public-hostname": {"type": "string"},
"ami-manifest-path": {"type": "string"},
"local-ipv4": {"type": "string"},
"hostname": {"type": "string"},
"ami-id": {"type": "string"},
"instance-type": {"type": "string"}
},
"description": "仅当 name 为 Amazon 时需要 AWS 元数据",
"additionalProperties": false
}
},
"additionalProperties": false
},
"leaseInfo": {
"type": "object",
"properties": {
"evictionDurationInSecs": {
"type": "integer",
"minimum": 1,
"description": "租约驱逐时间(秒),默认为 90 秒(可选)"
}
},
"additionalProperties": false
},
"metadata": {
"type": "object",
"description": "应用特定的键值对元数据(可选)",
"additionalProperties": {
"type": ["string", "number", "boolean", "null"]
}
}
},
"additionalProperties": false
}
续约 (RENEW)
示例: PUT /eureka/v2/apps/MYAPP/i-6589ef6
响应:
• 状态码: 200 (成功)
• 状态码: 404 (Eureka 不认识该实例,请先注册)
• 状态码: 500 (失败)
注销 (CANCEL)
(如果 Eureka 在 evictionDurationInSecs
(驱逐持续时间)内未收到服务节点的心跳,则该节点将自动注销)
示例: DELETE /eureka/v2/apps/MYAPP/i-6589ef6
响应:
• 状态码: 200 (成功)
• 状态码: 500 (失败)