# 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中展示调用链路图如下。 ![logical RDD 转换成 physical stage](https://images.gitee.com/uploads/images/2019/0125/113944_38d64825_1441068.jpeg) -------------------------------------------------------------------------------- 同时也可以使用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/)![输入图片说明](https://note.youdao.com/yws/public/resource/b66e97ebfcc7b1da5613ed3ff9c168d4/xmlnote/3643D65969AC4EB9A3AFA18F15E55B1C/6962 "在这里输入图片标题")