# springboot-feign-zipkin-eureka
**Repository Path**: ziyinjava/springboot-feign-zipkin-eureka
## Basic Information
- **Project Name**: springboot-feign-zipkin-eureka
- **Description**: 使用zipkin来监测服务之间的调用。服务之间通过zipkin来调用
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2020-10-11
- **Last Updated**: 2020-12-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# springboot-feign-zipkin-eureka
#### 介绍
使用zipkin来监测服务之间的调用。服务之间通过feign和restTemplate来调用
#### 使用说明
前期环境准备:默认已经启动好eureka-server('http://192.168.1.161:8761/')服务和zipkin服务('http://192.168.1.161:9411')
1.新建四个Module,分别命名'service1'、'service2'、'service3'、'service4'
2.分别在'service2'、'service3'、'service4'模块分别添加zipkin依赖,服务注册示例见服务注册和发现目录。
```
org.springframework.cloud
spring-cloud-starter-zipkin
org.springframework.cloud
spring-cloud-starter-feign
1.4.4.RELEASE
```
3.在'service1' 模块添加zipkin依赖,由于四个模块都有zipkin依赖,可以放在父依赖中
```
org.springframework.cloud
spring-cloud-starter-zipkin
```
4.在以上四个模块的原有的配置文件'application.yml'分别追加以下配置。
```
spring:
sleuth:
sampler:
probability: 1.0 #全部采样
zipkin:
base-url: http://192.168.1.161:9411
```
5.编写'service1'模块。
- controller代码如下:
```
@RestController
public class ProviderController {
@GetMapping("/{message}")
public String getMessage(@PathVariable String message) {
return message;
}
}
```
- 增加application.yml配置文件如下:
```
server:
port: 8087
spring:
application:
name: service1
```
6.编写'service2'模块
- controller代码如下,并在启动类上添加注解'@EnableFeignClients':
```
@RestController
public class ProviderController {
@Autowired
private ProviderService providerService;
@GetMapping("/{message}")
@HystrixCommand(fallbackMethod="getFallback")
public String get(@PathVariable String message){
String message1 = providerService.getMessage(message);
return "service2---->" + message1;
}
public String getFallback(@PathVariable String message) {
return "service2->回退机制" ;
}
}
```
- service代码如下:
```
@FeignClient(value = "service1")
public interface ProviderService {
@GetMapping("/{message}")
String getMessage(@PathVariable(value = "message") String message);
}
```
- 增加application.yml配置文件如下:
```
server:
port: 8083
spring:
application:
name: service2
```
7.编写'service3'模块
- controller代码如下,并在启动类上添加注解'@EnableFeignClients':
```
@RestController
public class ProviderController {
@Autowired
private ProviderService providerService;
@GetMapping("/{message}")
@HystrixCommand(fallbackMethod="getFallback")
public String get(@PathVariable String message){
String message1 = providerService.getMessage(message);
return "service3---->" + message1;
}
public String getFallback(@PathVariable String message) {
return "service3->回退机制" ;
}
```
- service代码如下:
```
@FeignClient(value = "service1")
public interface ProviderService {
@GetMapping("/{message}")
String getMessage(@PathVariable(value = "message") String message);
}
```
- 增加application.yml配置文件如下:
```
server:
port: 8084
spring:
application:
name: service3
```
8.编写'service4'模块
- controller代码如下,并在启动类上添加注解'@EnableFeignClients':
```
@RestController
public class ConsumerController {
@Autowired
private ConsumerService consumerService;
@Autowired
private ConsumerService2 consumerService2;
@GetMapping("/{message}")
@HystrixCommand(fallbackMethod="getFallback")
public String get(@PathVariable String message){
String messageResult = consumerService.getMessage(message);
return "service4---->" + messageResult;
}
public String getFallback(@RequestParam(value = "message") String message) {
return message + " = 回退机制" ;
}
@GetMapping("/data/{message}")
@HystrixCommand(fallbackMethod="getFallback2")
public String getData(@PathVariable String message){
String messageResult = consumerService2.getMessage(message);
return "service4---->" + messageResult;
}
public String getFallback2(@RequestParam(value = "message") String message) {
return message + " = 回退机制" ;
}
```
- service代码如下:
```
@FeignClient(value = "service2")
public interface ConsumerService {
@GetMapping("/{message}")
String getMessage(@PathVariable(value = "message") String message);
}
```
```
@FeignClient(value = "service3")
public interface ConsumerService2 {
@GetMapping("/{message}")
String getMessage(@PathVariable(value = "message") String message);
}
```
- 增加application.yml配置文件如下:
```
server:
port: 8088
spring:
application:
name: service4
```
9.然后分别启动四个模块即可,分别调用"localhost:8088/message=feign"localhost:8088/data/message=feign",zipkin中展示调用链路图如下。

--------------------------------------------------------------------------------
同时也可以使用restTemplate来调用rest服务
```
import org.springframework.web.client.RestTemplate;
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
}
}
```
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 码云特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)