服务发现
PolarisMesh提供服务发现相关接口,供客户端进行服务资源的拉取,服务资源包括服务实例、路由规则、限流规则、熔断规则等数据。
服务注册
请求示例
POST /v1/RegisterInstance
# 开启北极星客户端接口鉴权开关后,需要添加下面的 header
Header X-Polaris-Token: {访问凭据}
{
"service": "xxxx",
"namespace": "xxx",
"host": "xxx",
"port": 8080,
"protocol": "xx",
"version": "xx",
"location": {
"region": "xxx",
"zone": "xxx",
"campus": ""
},
"metadata": {
"key": "value"
}
}
心跳上报
请求示例
POST /v1/Heartbeat
# 开启北极星客户端接口鉴权开关后,需要添加下面的 header
Header X-Polaris-Token: {访问凭据}
{
"namespace": "", // 命名空间,必填;string
"service": "", // 服务名称,必填;string
"host":"", // 实例 host 信息,必填;string
"port": 80 // 实例 port 信息,必填;int
}
应答示例:
- 正常心跳上报结果。
{
"code": 200000,
"info": "execute success",
"instance": {
"service": "BootEchoServer",
"namespace": "default",
"host": "127.0.0.1",
"port": 28888
}
}
- 若实例不存在或者实例未开启心跳上报
{
"code": 400141,
"info": "heartbeat on disabled instance",
"instance": {
"service": "BootEchoServer",
"namespace": "default",
"vpc_id": null,
"host": "127.0.0.1",
"port": 28881
}
}
拉取服务实例
请求示例:
POST /v1/Discover
# 开启北极星客户端接口鉴权开关后,需要添加下面的 header
Header X-Polaris-Token: {访问凭据}
{
"type":1,
"service":{
"name":"test", // 服务名称;必填;string
"namespace":"Test", // 命名空间名称;必填;string
"revision":"1ad693071015aa282b39e223c9a7109fdda0edad" // 版本号;可选;string
}
}
应答示例:
- 若请求时携带的revision与服务端计算得到的revision一致,说明服务以及服务实例无变化,此时不会返回数据。
{
"code": 200001,
"info": "discover data is no change",
"type": "INSTANCE",
"service": {
"name": "test",
"namespace": "Test",
"revision": "1ad693071015aa282b39e223c9a7109fdda0edad"
}
}
- 若请求的revision与服务端计算得到的revision不一致,说明服务以及服务实例有变化,此时会返回最新的数据。
{
"code": 200000,
"info": "execute success",
"type": "INSTANCE",
"service": {
"name": "test",
"namespace": "Test",
"metadata": {
},
"ports": "",
"business": "ee",
"department": "",
"ctime": "2022-01-15 18:09:20",
"mtime": "2022-01-15 18:09:20",
"revision": "1b9b4b4b3802b9dcd1891a9e2fccf27d26f4418d",
"platform_id": ""
},
"instances": [
{
"id": "d4786bc4cd4ab6798feb5ef43e8c66f18c43b69b",
"service": "test",
"namespace": "Test",
"host": "127.0.0.1",
"port": 80,
"protocol": "http",
"version": "1.0",
"priority": 0,
"weight": 100,
"enableHealthCheck": false,
"healthy": true,
"isolate": false,
"metadata": {
"key": "value"
},
"mtime": "2021-08-18 20:13:49",
"revision": "0489673f4a4746609c2b52bdcddb2a5f"
}
]
}
服务实例数据的数据结构描述可以参考:实例管理 (opens new window)
拉取路由规则
请求示例:
POST /v1/Discover
{
"type": 3, // 类型;必填;int;3:路由规则
"service": {
"name": "...", // 名称;必填;string
"namespace": "..." // 所属命名空间;必填;string
}
}
应答示例:
{
"code": 200000,
"info": "...",
"routing": {
"service": "...",
"namespace": "...",
"inbounds": [ // 入流量规则
{
"source": [
{
"service": "...",
"namespace": "...",
"metadata": {"...": "..."} // 匹配用户传入metadata
}
],
"destination": [
{
"service": "...",
"namespace": "...",
"metadata": {"...": "..."}, // 匹配目标服务实例metadata
"priority": ..., // 优先级
"weight": ... // 权重
}
]
}
],
"outbounds": [ // 出流量规则
{
"source": [
{
"service": "...",
"namespace": "...",
"metadata": {"...": "..."} // 匹配用户传入metadata
}
],
"destination": [
{
"service": "...",
"namespace": "...",
"metadata": {"...": "..."}, // 匹配目标服务实例metadata
"priority": ..., // 优先级
"weight": ... // 权重
}
]
}
]
}
}
服务路由规则数据结构可参考:路由规则管理 (opens new window)
拉取限流规则
请求示例:
POST /v1/Discover
# 开启北极星服务端针对控制台接口鉴权开关后,需要添加下面的 header
Header X-Polaris-Token: {访问凭据}
{
"type": 4, // 类型;必填;int;4:限流规则
"service": {
"name": "...", // 名称;必填;string
"namespace": "..." // 所属命名空间;必填;string
}
}
应答示例:
{
"code": 200000,
"info": "...",
"rateLimit": {
"rules": [], // 限流规则集合
"revision": "..." // 限流规则汇总的revision信息
}
}
服务限流规则数据结构可参考:限流规则管理 (opens new window)
拉取熔断规则
请求示例:
POST /v1/Discover
# 开启北极星服务端针对控制台接口鉴权开关后,需要添加下面的 header
Header X-Polaris-Token: {访问凭据}
{
"type": 5, // 类型;必填;int;5:熔断规则
"service": {
"name": "...", // 名称;必填;string
"namespace": "..." // 所属命名空间;必填;string
}
}
应答示例:
{
"code": 200000,
"info": "...",
"circuitBreaker": {} // 熔断规则
}
服务熔断规则数据结构可参考:熔断规则管理
拉取服务列表
请求示例:
POST /v1/Discover
# 开启北极星服务端针对控制台接口鉴权开关后,需要添加下面的 header
Header X-Polaris-Token: {访问凭据}
{
"type": 6, // 类型;必填;int;6:服务列表
"service": {
"name": "...", // 名称;选填;string
"namespace": "..." // 所属命名空间;选填;string
"business": "..." // 业务描述;选填;string
"metadata": { // 元数据;选填;map<string, string>
"key": "value"
}
}
}
应答示例:
{
"code":200000,
"info":"...",
"services":[
{
"name":"test",
"namespace":"Test",
"metadata":{
"":""
},
"ports":"",
"business":"ee",
"department":"",
"ctime":"2022-01-15 18:09:20",
"mtime":"2022-01-15 18:09:20",
"revision":"1b9b4b4b3802b9dcd1891a9e2fccf27d26f4418d",
"platform_id":""
}
]
}