动态路由

引入依赖

  1. go get github.com/polarismesh/polaris-go@latest

初始化 polaris.yaml

你需要在项目的根路径下创建一个 polaris.yaml 文件用于初始化 polaris-go SDK。polaris.yaml配置详细

SDK实例构建

  1. router, err := polaris.NewRouterAPI()

路由请求

  1. // ProcessRoutersRequest 执行路由请求结构体
  2. type ProcessRoutersRequest struct {
  3. // 可选参数,设置本次路由请求期望执行的路由插件
  4. // 当前支持的路由插件如下
  5. // - 自定义路由:ruleBasedRouter
  6. // - 就近路由:nearbyBasedRouter
  7. // - 元数据路由:dstMetaRouter
  8. Routers []string
  9. // 可选参数,主调服务信息,你可以通过 ServiceInfo.Metadata 设置本次请求的流量标签信息
  10. SourceService ServiceInfo
  11. // 必选参数,待执行服务路由的实例列表
  12. // 1. InstancesResponse, returned from ConsumerAPI.GetAllInstances.
  13. // 2. DefaultServiceInstances, for user to construct manually.
  14. DstInstances ServiceInstances
  15. // 可选参数,对应路由规则中的方法($method)标签
  16. Method string
  17. // 可选,单次查询超时时间,默认直接获取全局的超时配置
  18. // 用户总最大超时时间为(1+RetryCount) * Timeout
  19. Timeout *time.Duration
  20. // 可选,重试次数,默认直接获取全局的超时配置
  21. RetryCount *int
  22. }

说明:

如果当前 ProcessRoutersRequest 还不支持 AddArgument 方法,同时服务端版本 >= 1.12.0,SourceService.Metadata 对应的 key 名称如下:

  • 路径: $path
  • 方法: $method
  • 请求头: $header.{标签键}
  • 请求参数: $query.{标签键}
  • 请求COOKIE: $cookie.{标签键}
  • 主调IP: $caller_ip
  • 自定义: {标签键}

执行服务路由

你在根据本次调用的上下文信息,初始化完成 ProcessRoutersRequest 结构体之后,只需要调用 RouterAPI.ProcessRouters 执行服务路由, 并从响应 model.InstancesResponse 获取符合本次路由条件的实例列表。

  1. resp, err := router.ProcessRouters(routerRequest)
  2. instances := resp.GetInstances()

如何基于 polaris-go 客户端完成一个动态路由的程序