服务发现


PolarisMesh提供服务发现相关接口,供客户端进行服务资源的拉取,服务资源包括服务实例、路由规则、限流规则、熔断规则等数据。

服务注册

请求示例

  1. POST /v1/RegisterInstance
  2. # 开启北极星客户端接口鉴权开关后,需要添加下面的 header
  3. Header X-Polaris-Token: {访问凭据}
  4. {
  5. "service": "xxxx",
  6. "namespace": "xxx",
  7. "host": "xxx",
  8. "port": 8080,
  9. "protocol": "xx",
  10. "version": "xx",
  11. "location": {
  12. "region": "xxx",
  13. "zone": "xxx",
  14. "campus": ""
  15. },
  16. "metadata": {
  17. "key": "value"
  18. }
  19. }

心跳上报

请求示例

  1. POST /v1/Heartbeat
  2. # 开启北极星客户端接口鉴权开关后,需要添加下面的 header
  3. Header X-Polaris-Token: {访问凭据}
  4. {
  5. "namespace": "", // 命名空间,必填;string
  6. "service": "", // 服务名称,必填;string
  7. "host":"", // 实例 host 信息,必填;string
  8. "port": 80 // 实例 port 信息,必填;int
  9. }

应答示例:

  • 正常心跳上报结果。
  1. {
  2. "code": 200000,
  3. "info": "execute success",
  4. "instance": {
  5. "service": "BootEchoServer",
  6. "namespace": "default",
  7. "host": "127.0.0.1",
  8. "port": 28888
  9. }
  10. }
  • 若实例不存在或者实例未开启心跳上报
  1. {
  2. "code": 400141,
  3. "info": "heartbeat on disabled instance",
  4. "instance": {
  5. "service": "BootEchoServer",
  6. "namespace": "default",
  7. "vpc_id": null,
  8. "host": "127.0.0.1",
  9. "port": 28881
  10. }
  11. }

拉取服务实例

请求示例:

  1. POST /v1/Discover
  2. # 开启北极星客户端接口鉴权开关后,需要添加下面的 header
  3. Header X-Polaris-Token: {访问凭据}
  4. {
  5. "type":1,
  6. "service":{
  7. "name":"test", // 服务名称;必填;string
  8. "namespace":"Test", // 命名空间名称;必填;string
  9. "revision":"1ad693071015aa282b39e223c9a7109fdda0edad" // 版本号;可选;string
  10. }
  11. }

应答示例:

  • 若请求时携带的revision与服务端计算得到的revision一致,说明服务以及服务实例无变化,此时不会返回数据。
  1. {
  2. "code": 200001,
  3. "info": "discover data is no change",
  4. "type": "INSTANCE",
  5. "service": {
  6. "name": "test",
  7. "namespace": "Test",
  8. "revision": "1ad693071015aa282b39e223c9a7109fdda0edad"
  9. }
  10. }
  • 若请求的revision与服务端计算得到的revision不一致,说明服务以及服务实例有变化,此时会返回最新的数据。
  1. {
  2. "code": 200000,
  3. "info": "execute success",
  4. "type": "INSTANCE",
  5. "service": {
  6. "name": "test",
  7. "namespace": "Test",
  8. "metadata": {
  9. },
  10. "ports": "",
  11. "business": "ee",
  12. "department": "",
  13. "ctime": "2022-01-15 18:09:20",
  14. "mtime": "2022-01-15 18:09:20",
  15. "revision": "1b9b4b4b3802b9dcd1891a9e2fccf27d26f4418d",
  16. "platform_id": ""
  17. },
  18. "instances": [
  19. {
  20. "id": "d4786bc4cd4ab6798feb5ef43e8c66f18c43b69b",
  21. "service": "test",
  22. "namespace": "Test",
  23. "host": "127.0.0.1",
  24. "port": 80,
  25. "protocol": "http",
  26. "version": "1.0",
  27. "priority": 0,
  28. "weight": 100,
  29. "enableHealthCheck": false,
  30. "healthy": true,
  31. "isolate": false,
  32. "metadata": {
  33. "key": "value"
  34. },
  35. "mtime": "2021-08-18 20:13:49",
  36. "revision": "0489673f4a4746609c2b52bdcddb2a5f"
  37. }
  38. ]
  39. }

服务实例数据的数据结构描述可以参考:实例管理服务发现 - 图1 (opens new window)

拉取路由规则

请求示例:

  1. POST /v1/Discover
  2. {
  3. "type": 3, // 类型;必填;int;3:路由规则
  4. "service": {
  5. "name": "...", // 名称;必填;string
  6. "namespace": "..." // 所属命名空间;必填;string
  7. }
  8. }

应答示例:

  1. {
  2. "code": 200000,
  3. "info": "...",
  4. "routing": {
  5. "service": "...",
  6. "namespace": "...",
  7. "inbounds": [ // 入流量规则
  8. {
  9. "source": [
  10. {
  11. "service": "...",
  12. "namespace": "...",
  13. "metadata": {"...": "..."} // 匹配用户传入metadata
  14. }
  15. ],
  16. "destination": [
  17. {
  18. "service": "...",
  19. "namespace": "...",
  20. "metadata": {"...": "..."}, // 匹配目标服务实例metadata
  21. "priority": ..., // 优先级
  22. "weight": ... // 权重
  23. }
  24. ]
  25. }
  26. ],
  27. "outbounds": [ // 出流量规则
  28. {
  29. "source": [
  30. {
  31. "service": "...",
  32. "namespace": "...",
  33. "metadata": {"...": "..."} // 匹配用户传入metadata
  34. }
  35. ],
  36. "destination": [
  37. {
  38. "service": "...",
  39. "namespace": "...",
  40. "metadata": {"...": "..."}, // 匹配目标服务实例metadata
  41. "priority": ..., // 优先级
  42. "weight": ... // 权重
  43. }
  44. ]
  45. }
  46. ]
  47. }
  48. }

服务路由规则数据结构可参考:路由规则管理服务发现 - 图2 (opens new window)

拉取限流规则

请求示例:

  1. POST /v1/Discover
  2. # 开启北极星服务端针对控制台接口鉴权开关后,需要添加下面的 header
  3. Header X-Polaris-Token: {访问凭据}
  4. {
  5. "type": 4, // 类型;必填;int;4:限流规则
  6. "service": {
  7. "name": "...", // 名称;必填;string
  8. "namespace": "..." // 所属命名空间;必填;string
  9. }
  10. }

应答示例:

  1. {
  2. "code": 200000,
  3. "info": "...",
  4. "rateLimit": {
  5. "rules": [], // 限流规则集合
  6. "revision": "..." // 限流规则汇总的revision信息
  7. }
  8. }

服务限流规则数据结构可参考:限流规则管理服务发现 - 图3 (opens new window)

拉取熔断规则

请求示例:

  1. POST /v1/Discover
  2. # 开启北极星服务端针对控制台接口鉴权开关后,需要添加下面的 header
  3. Header X-Polaris-Token: {访问凭据}
  4. {
  5. "type": 5, // 类型;必填;int;5:熔断规则
  6. "service": {
  7. "name": "...", // 名称;必填;string
  8. "namespace": "..." // 所属命名空间;必填;string
  9. }
  10. }

应答示例:

  1. {
  2. "code": 200000,
  3. "info": "...",
  4. "circuitBreaker": {} // 熔断规则
  5. }

服务熔断规则数据结构可参考:熔断规则管理

拉取服务列表

请求示例:

  1. POST /v1/Discover
  2. # 开启北极星服务端针对控制台接口鉴权开关后,需要添加下面的 header
  3. Header X-Polaris-Token: {访问凭据}
  4. {
  5. "type": 6, // 类型;必填;int;6:服务列表
  6. "service": {
  7. "name": "...", // 名称;选填;string
  8. "namespace": "..." // 所属命名空间;选填;string
  9. "business": "..." // 业务描述;选填;string
  10. "metadata": { // 元数据;选填;map<string, string>
  11. "key": "value"
  12. }
  13. }
  14. }

应答示例:

  1. {
  2. "code":200000,
  3. "info":"...",
  4. "services":[
  5. {
  6. "name":"test",
  7. "namespace":"Test",
  8. "metadata":{
  9. "":""
  10. },
  11. "ports":"",
  12. "business":"ee",
  13. "department":"",
  14. "ctime":"2022-01-15 18:09:20",
  15. "mtime":"2022-01-15 18:09:20",
  16. "revision":"1b9b4b4b3802b9dcd1891a9e2fccf27d26f4418d",
  17. "platform_id":""
  18. }
  19. ]
  20. }