TL;NR
本文目的:
- 主要是为了展示SpringBoot 中使用zipkin的实现过程
- 顺带展示一下SpringBoot使用zookeeper作为注册中心,进行服务间请求调用的场景
0x01 故事梗概
- 首先, 我们会使用到一个zipkin服务. 其安装过程请参考这里.
- 其次我们需要一个
zookeeper
服务, 一会儿写一下安装过程. - 最后,编写两个
SpringBoot
服务.并让它们形成调用链关系. - 验证结果.
0x02 Zookeeper 安装
单机版zookeeper
安装,其实非常简单, 我们这里记录一下windows
下的安装过程. (其他环境下类似).
- 首先, 我们从官网找到最新版本的
zookeeper
https://archive.apache.org/dist/zookeeper/
这里我们选择目前的最新版本 3.5.5, 下载bin的压缩包.
-
解压出来后, 我们把
conf
目录下的zoo_sample.cfg
复制一份,命名为zoo.cfg
.
-
启动
zookeeper
服务:
进入bin
目录, 双击zkServer.cmd
, 即可完成服务启动.
zookeeper
对外提供的服务端口默认为2181
-
验证
zookeeper
服务:
双击bin
目录下的zkCli.cmd
文件, 启动zookeeper
的命令行客户端工具, 如果能看到下图的效果, 表示服务没有问题.
0x03 zipkin windows安装
如果也想在windows
下, 最小化体验zipkin
服务.
这里也提供一下安装过程:
- 从这里下载 最新版
jar
文件. - 命令行启动
java -jar zipkin-server-2.16.1-exec.jar
- 验证
访问http://localhost:9411/, 如果能正常看到下面的信息, 表示服务启动成功.
0x04 编写后端服务-1
这个服务用于被另外一个服务调用, 我们通过
zookeeper
将此服务暴露出去.
此服务中, 我们提供一个简单的接口.
-
创建SpringBoot项目,选择依赖项如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 编写代码
接口代码
@RestController
@SpringBootApplication
public class ApiBackApplication {
public static void main(String[] args) {
SpringApplication.run(ApiBackApplication.class, args);
}
@RequestMapping("/api")
public String api(@RequestParam("value") String value){
return "Backend API : [" + value + "]";
}
}
application.yml ( 自行修改 application.properties -> application.yml)
spring:
application:
# 配置服务名称
name: api-back
# 配置zipkin上服信息
zipkin:
base-url: http://localhost:9411
sleuth:
trace-id128: true
sampler:
probability: 1.0
# 配置Zookeeper注册中心信息
cloud:
zookeeper:
connect-string: localhost:2181
server:
port: 7000
- 验证:
我们在浏览器上直接请求: http://localhost:7000/api?value=jianshu
同时, 我们在zookeeper
客户端,可以查看一下注册中心的服务信息:
0x05 编写后端服务-2
这个服务用于对客户端提供服务 , 同时, 它在内部还会调用上一个服务的接口.
所以, 我们在新建服务的时候 , 要增加一个服务依赖:OpenFeign
OpenFeign
作用:
- 提供一个接口调用模板, 简化服务间的接口调用
- 自带负载均衡功能
- 新建项目:
导入依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 编写代码:
application.yml
spring:
application:
# 配置服务名称
name: api-front
# 配置zipkin上服信息
zipkin:
base-url: http://localhost:9411
sleuth:
trace-id128: true
sampler:
probability: 1.0
# 配置Zookeeper注册中心信息
cloud:
zookeeper:
connect-string: localhost:2181
server:
port: 7001
Feign模板接口:
需要注意的地方:
- 这是一个接口, 不是
类
- 接口方法,要完全复制被调方的定义, 由于是方法参数列表里的
注解
也不能少.
@FeignClient("api-back")
public interface ApiBackFeign {
/**
* 向api-back调用接口 /api
* @param value 参数
* @return api返回值
*/
@RequestMapping("/api")
String api(@RequestParam("value") String value);
}
调用接口方法
@EnableFeignClients
@RestController
@SpringBootApplication
public class ApiFrontApplication {
private final ApiBackFeign apiBackFeign;
public ApiFrontApplication(ApiBackFeign apiBackFeign) {
this.apiBackFeign = apiBackFeign;
}
public static void main(String[] args) {
SpringApplication.run(ApiFrontApplication.class, args);
}
@RequestMapping("/front")
public String index(@RequestParam("name") String name){
return apiBackFeign.api(name);
}
}
0x06 验证
- 验证最终结果:
请求接口: http://localhost:7001/front?name=国服最坑开发
-
查看
zookeeper
可以看到, 现在两个服务, 都成功的注册到了 zookeeper上.
如果一个服务有多个实例的话, 那么下面的实例id也会有多个.
-
查看
zipkin
直接点一下查找
, 然后就可以看到请求信息如下: