Eureka REST 相关接口 - 详解


可供非 Java 应用程序运用的 Eureka REST 操作。

appID 是应用程序的名称,instanceID 是与实例关联的唯一标识符。在 AWS 云中,instanceID 是实例的实例 ID;在其他数据中心,它是实例的主机名。

对于 XML/JSON,HTTP 的 ACCEPT 类型以及提供的 content-type 必须分别包含 application/xmlapplication/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/appsHTTP 状态码: 成功时返回 200
输出: JSON/XML
查询特定 appID 的所有实例GET /eureka/v2/apps/{appID}HTTP 状态码: 成功时返回 200
输出: JSON/XML
查询特定 appID/instanceIDGET /eureka/v2/apps/{appID}/{instanceID}HTTP 状态码: 成功时返回 200
输出: JSON/XML
查询特定 instanceIDGET /eureka/v2/instances/{instanceID}HTTP 状态码: 成功时返回 200
输出: JSON/XML
将实例移出服务PUT /eureka/v2/apps/{appID}/{instanceID}/status?value=OUT_OF_SERVICEHTTP 状态码:
* 成功时返回 200
* 失败时返回 500
将实例移回服务(移除覆盖状态)DELETE /eureka/v2/apps/{appID}/{instanceID}/status?value=UPHTTP 状态码:
* 成功时返回 200
* 失败时返回 500
(value=UP 是可选的,它作为移除覆盖状态后回退状态的建议值)
更新元数据PUT /eureka/v2/apps/{appID}/{instanceID}/metadata?key=valueHTTP 状态码:
* 成功时返回 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 (失败)


posted @ 2025-07-24 09:43  yjbjingcha  阅读(23)  评论(0)    收藏  举报