Tars-Spring-boot 使用说明

功能说明

Tars支持使用通过spring boot的方式编写tars服务,使用此功能需要依赖tars-spring-boot-starter.jar包,以及spring boot 2.0及以上版本。你可以将你的servant作为一个Spring bean,注解暴露spring bean即可。

依赖配置

使用此功能需要添加依赖,在pom.xml中添加如下配置:

  1. <properties>
  2. <spring-boot.version>2.0.3.RELEASE</spring-boot.version>
  3. </properties>
  4. <dependencyManagement>
  5. <dependencies>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-dependencies</artifactId>
  9. <version>${spring-boot.version}</version>
  10. <type>pom</type>
  11. <scope>import</scope>
  12. </dependency>
  13. </dependencies>
  14. </dependencyManagement>
  15. <dependencies>
  16. <dependency>
  17. <groupId>com.tencent.tars</groupId>
  18. <artifactId>tars-spring-boot-starter</artifactId>
  19. <version>1.6.1</version>
  20. </dependency>
  21. </dependencies>

Servant配置

在spring boot中,需要通过注解开启tars服务相关功能:

  1. @SpringBootApplication
  2. @EnableTarsServer
  3. public class QuickStartApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(QuickStartApplication.class, args);
  6. }
  7. }

通过注解@EnableTarsServer标识这是一个TARS服务,并开启服务相关功能。

编写tars协议文件,如:

  1. module TestApp
  2. {
  3. interface Hello
  4. {
  5. string hello(int no, string name);
  6. };
  7. };

并通过TARS提供的maven插件生成对应的接口代码:

  1. @Servant
  2. public interface HelloServant {
  3. public String hello(int no, String name);
  4. }

服务逻辑通过实现接口来编写:

  1. @TarsServant("HelloObj")
  2. public class HelloServantImpl implements HelloServant {
  3. @Override
  4. public String hello(int no, String name) {
  5. return String.format("hello no=%s, name=%s, time=%s", no, name, System.currentTimeMillis());
  6. }
  7. }

接口的实现类通过注解@TarsServant来暴露服务,其中填写的’HelloObj’为servant名,该名称与管理平台上的名称对应即可。

编写一个Http服务

此外如果你想使用spring-boot来编写一个http服务,而不使用taf接口的话也是可以的:

  1. @SpringBootApplication
  2. @EnableTarsServer
  3. @TarsHttpService("HttpObj")
  4. @RestController
  5. public class DemoApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(DemoApplication.class, args);
  8. }
  9. @RequestMapping(path = "/test")
  10. public String test() {
  11. return "hello world";
  12. }
  13. }

此时添加一个@TarsHttpService注解,这个注解中需要添加你希望绑定的非tars协议 servant的名称,框架会自动将spring-boot中嵌入的容器的端口绑定到对应Servant的端口上,这样你就可以方便的使用spring-mvc的各种注解来开发http和web服务了。

客户端注入

为了简化客户端的构造,spring-boot-starter提供了客户端自动注入的功能,在你需要注入客户端的属性上加上@TarsClient注解,框架会自动帮你构造并注入客户端:

  1. @TarsServant("HelloObj")
  2. public class HelloWorldServantImpl implements HelloWordServant {
  3. @TarsClient("TarsJavaTest.SpringBootServer.HelloObj")
  4. HelloWordPrx prx;
  5. }

如上述代码,通过@TarsClient(“TarsJavaTest.SpringBootServer.HelloObj”)即可注入HelloWordPrx客户端,如果只填写Obj名称则采用默认值注入客户端,当然你也可以在注解中自定义客户端配置:

  1. @TarsServant("HelloObj")
  2. public class HelloWorldServantImpl implements HelloWordServant {
  3. @TarsClient(name = "TarsJavaTest.SpringBootServer.HelloObj", syncTimeout = 1000)
  4. HelloWordPrx prx;
  5. }

这样就设置了客户端同步超时时间,该注解提供了所有常用配置的配置项:

  1. @Target({ ElementType.FIELD })
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. public @interface TarsClient {
  5. @AliasFor("name")
  6. String value() default "";
  7. @AliasFor("value")
  8. String name() default "";
  9. String setDivision() default "";
  10. boolean isgray() default false;
  11. int connections() default Constants.default_connections;
  12. int connectTimeout() default Constants.default_connect_timeout;
  13. int syncTimeout() default Constants.default_sync_timeout;
  14. int asyncTimeout() default Constants.default_async_timeout;
  15. boolean enableSet() default false;
  16. boolean tcpNoDelay() default false;
  17. String charsetName() default "UTF-8";
  18. }

包括连接数、同步异步超时时间,字符集等均可以在注解中配置。

服务发布

编写完成代码后,可以通过spring boot提供的spring-boot-maven-plugin插件进行打包,将服务打包为jar包后上传即可启动。

如何在本地启动和开发调试tars

拷贝node生成的模板文件到本地(在服务器 tasnode/data/服务名/conf 目录下),修改其中每个servant的启动ip和端口文本地ip端口 配置启动参数。-Dconfig=(模板路径) 通过ide启动MainClass

版本升级指南

如需使用tars-spring-boot的新功能需要将tars升级到1.6.1版本及以上版本,本次改动相对较大,附上版本升级指南:

  1. 管理平台需要重新编译升级。
  2. tars-node需要升级到新版本。
  3. 模板选择需要选tars.tarsjava.springboot模版。如果不是重新搭建环境可自行添加模板,父模板选择tars.tarsjava.default,内容如下:
  1. <tars>
  2. <application>
  3. <server>
  4. packageFormat=jar
  5. mainclass=-jar ${basepath}/${app}.${server}.jar
  6. </server>
  7. </application>
  8. </tars>