TL;NR
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
-
创建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 + "]";
}
}
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
- 新建项目:
导入依赖项:
<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>
- 编写代码:
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
@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
直接点一下查找
, 然后就可以看到请求信息如下: