动态路由
引入依赖
go get github.com/polarismesh/polaris-go@latest
初始化 polaris.yaml
你需要在项目的根路径下创建一个 polaris.yaml 文件用于初始化 polaris-go SDK。polaris.yaml配置详细
SDK实例构建
router, err := polaris.NewRouterAPI()
路由请求
// ProcessRoutersRequest 执行路由请求结构体
type ProcessRoutersRequest struct {
// 可选参数,设置本次路由请求期望执行的路由插件
// 当前支持的路由插件如下
// - 自定义路由:ruleBasedRouter
// - 就近路由:nearbyBasedRouter
// - 元数据路由:dstMetaRouter
Routers []string
// 可选参数,主调服务信息,你可以通过 ServiceInfo.Metadata 设置本次请求的流量标签信息
SourceService ServiceInfo
// 必选参数,待执行服务路由的实例列表
// 1. InstancesResponse, returned from ConsumerAPI.GetAllInstances.
// 2. DefaultServiceInstances, for user to construct manually.
DstInstances ServiceInstances
// 可选参数,对应路由规则中的方法($method)标签
Method string
// 可选,单次查询超时时间,默认直接获取全局的超时配置
// 用户总最大超时时间为(1+RetryCount) * Timeout
Timeout *time.Duration
// 可选,重试次数,默认直接获取全局的超时配置
RetryCount *int
}
说明:
如果当前 ProcessRoutersRequest 还不支持 AddArgument 方法,同时服务端版本 >= 1.12.0,SourceService.Metadata 对应的 key 名称如下:
- 路径: $path
- 方法: $method
- 请求头: $header.{标签键}
- 请求参数: $query.{标签键}
- 请求COOKIE: $cookie.{标签键}
- 主调IP: $caller_ip
- 自定义: {标签键}
执行服务路由
你在根据本次调用的上下文信息,初始化完成 ProcessRoutersRequest 结构体之后,只需要调用 RouterAPI.ProcessRouters 执行服务路由, 并从响应 model.InstancesResponse 获取符合本次路由条件的实例列表。
resp, err := router.ProcessRouters(routerRequest)
instances := resp.GetInstances()