动态路由

引入依赖

修改应用根目录下的pom.xml,为 polaris-java 添加 dependencyManagement:

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>com.tencent.polaris</groupId>
  5. <artifactId>polaris-dependencies</artifactId>
  6. <version>${version}</version>
  7. <type>pom</type>
  8. <scope>import</scope>
  9. </dependency>
  10. </dependencies>
  11. </dependencyManagement>

然后只需要在 标签中在添加 polaris-all 即可

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.tencent.polaris</groupId>
  4. <artifactId>polaris-all</artifactId>
  5. </dependency>
  6. </dependencies>

初始化 polaris.yaml

你需要在项目的 main/resources 下创建一个 polaris.yaml 文件用于初始化 polaris-java SDK。polaris.yaml配置详细

服务注册

SDK实例构建

当初始化好 polaris.yaml 文件之后,你可以直接 import com.tencent.polaris.factory.api.RouterAPIFactory, 使用 RouterAPIFactory 中的方法进行构造一个 RouterAPI SDK 实例

  1. import com.tencent.polaris.factory.api.RouterAPIFactory;
  2. public static void main(String[] args) throws Exception {
  3. RouterAPI routerAPI = RouterAPIFactory.createRouterAPI();
  4. }

注册请求体

  1. ProcessRoutersRequest request = new ProcessRoutersRequest();/
  2. // 被调服务命名空间
  3. request.setNamespace();
  4. // 被调服务名称
  5. request.setService();
  6. // 可选,对应自定义路由规则中请求标签中的方法(Method)
  7. request.setMethod();
  8. // 可选,设置主调服务信息,只用于路由规则匹配
  9. SourceService serviceInfo = new SourceService();
  10. // 设置主调服务命名空间
  11. serviceInfo.setNamespace(String namespace);
  12. // 设置主调服务名称
  13. serviceInfo.setService(String service);
  14. // 设置主调方的请求标签信息
  15. serviceInfo.setArguments(Set<RouteArgument> arguments);
  16. request.setSourceService(serviceInfo);
  17. // 设置待参与路由的目标实例
  18. request.setDstInstances();
  19. ProcessRoutersRequest.RouterNamesGroup group = new ProcessRoutersRequest.RouterNamesGroup();
  20. // 设置前置路由
  21. group.setBeforeRouters();
  22. // 设置业务路由
  23. group.setCoreRouters();
  24. // 设置后置路由
  25. group.setAfterRouters();
  26. // 可选,设置路由插件执行链
  27. // 当前支持的路由插件类型如下
  28. // - 就近路由: nearByRoute
  29. // - 自定义路由: ruleRouter
  30. // - 元数据路由: metadataRoute
  31. request.setRouters();

说明:

如果当前 ProcessRoutersRequest 还不支持 putRouterArgument 方法,或者不存在 class SourceService, 同时服务端版本 >= 1.12.0,请求标签对应的 key 名称如下:

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

执行服务路由

你在初始化完 ProcessRoutersRequest 结构体后,只需要调用 RouterAPI.processRouters 方法即可完成服务路由

  1. ProcessRoutersResponse resp = routerAPI.processRouters(registerRequest)

如何基于 polaris-java 客户端完成一个服务路由的程序