环境准备

要使用 SOFABoot,需要先准备好基础环境,SOFABoot 依赖以下环境:

  • JDK8
  • 需要采用 Apache Maven 3.2.5 或者以上的版本来编译

引入 SOFABoot

在创建好一个 Spring Boot 的工程之后,接下来就需要引入 SOFABoot 的依赖,首先,需要将上文中生成的 Spring Boot 工程的 包解压后,修改 Maven 项目的配置文件 pom.xml,将

  1. <parent>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>sofaboot-dependencies</artifactId>
  4. <version>${sofa.boot.version}</version>
  5. </parent>

这里的 ${sofa.boot.version} 指定具体的 SOFABoot 版本,。

最后,在工程的 application.properties 文件下添加一个 SOFATracer 要使用的参数,包括 spring.application.name 用于标示当前应用的名称;logging.path 用于指定日志的输出目录。

  1. # Application Name
  2. spring.application.name=HttpClientDemo
  3. # logging path
  4. logging.path=./logs
  1. <groupId>org.springframework.boot</groupId>
  2. <artifactId>spring-boot-starter-web</artifactId>
  3. </dependency>
  4. <groupId>com.alipay.sofa</groupId>
  5. <artifactId>tracer-sofa-boot-starter</artifactId>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.alipay.sofa</groupId>
  9. <artifactId>sofa-tracer-resttmplate-plugin</artifactId>
  10. </dependency>

添加一个提供 RESTFul 服务的 Controller

以 API 方式构造 RestTemplate 发起一次对上文的 RESTFul 服务的调用

  • 构造 RestTemplate 同步调用实例
  1. RestTemplate restTemplate = SofaTracerRestTemplateBuilder.buildRestTemplate();
  2. ResponseEntity<String> responseEntity = restTemplate.getForEntity(
  3. "http://sac.alipay.net:8080/rest", String.class);
  • 构造 RestTemplate 异步调用实例
  1. AsyncRestTemplate asyncRestTemplate = SofaTracerRestTemplateBuilder
  2. .buildAsyncRestTemplate();
  3. "http://sac.alipay.net:8080/asyncrest", String.class);
  1. @Autowired
  2. RestTemplate restTemplate;

运行

调用成功:

  1. 2018-10-24 10:45:28.989 INFO 5081 --- [ main] c.a.s.t.e.r.RestTemplateDemoApplication : Response is {"count":1}
  2. 2018-10-24 10:45:34.014 INFO 5081 --- [ main] c.a.s.t.e.r.RestTemplateDemoApplication : Async Response is {"count":2}
  3. 2018-10-24 10:45:34.014 INFO 5081 --- [ main] c.a.s.t.e.r.RestTemplateDemoApplication : test finish .......

查看日志

在上面的 application.properties 里面,我们配置的日志打印目录是 ./logs 即当前应用的根目录(我们可以根据自己的实践需要进行配置),在当前工程的根目录下可以看到类似如下结构的日志文件:

  1. ./logs
  2. ├── spring.log
  3. └── tracelog
  4. ├── resttemplate-digest.log
  5. ├── resttemplate-stat.log
  6. ├── spring-mvc-digest.log
  7. ├── spring-mvc-stat.log
  8. ├── static-info.log
  9. └── tracer-self.log
  • 摘要日志
  1. {"time":"2018-10-24 10:45:28.977","local.app":"RestTemplateDemo","traceId":"0a0fe8b3154034912878910015081","spanId":"0","request.url":"http://sac.alipay.net:8080/rest","method":"GET","result.code":"200","resp.size.bytes":0,"time.cost.milliseconds":188,"current.thread.name":"main","remote.app":"","baggage":""}
  2. {"time":"2018-10-24 10:45:34.013","local.app":"RestTemplateDemo","traceId":"0a0fe8b3154034912900410025081","spanId":"0","request.url":"http://sac.alipay.net:8080/asyncrest","method":"GET","result.code":"200","resp.size.bytes":0,"time.cost.milliseconds":5009,"current.thread.name":"SimpleAsyncTaskExecutor-1","remote.app":"","baggage":""}
  • 统计日志

附此示例工程的源代码地址