优雅的服务调用方案-openFeign
目录
1、Feign概述
2、整合Feign
3、Feign拓展
1、Feign概述
Feign可以理解是对Ribbon的简单封装。但优雅了使用方法。
过去、我们通过Ribbon来绑定服务实现远程调用、但是面对多依赖服务环境下、大量的服务名可能会让你晕头转向、所以Feign提供的面向接口调用远程服务逐渐成为主流、Feign通过同样的接口代码、在类级注解@FeignClient上绑定被调用服务名、在方法声明上指定请求路径、就可以确定唯一URL来调用远程服务了、还是以熟悉的面向接口的方式。
2、整合Feign
整合Feign的方法有很多种、我更倾向于将Feign依赖的接口独立成一个模块、然后在Feign消费端实现调用。
Feign既然是对Ribbon的封装、那么我们的项目改变也是在消费端进行。但我们先来看看如何构建独立的接口模块
2.1、Feign接口模块设计
接口模块需要是一个boot项目!
2.1.1、POM文件
增加Feign的依赖
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.1.2、启动类
@SpringBootApplication
@EnableFeignClients //当前作为Feign接口模块、必须加此注解
public class Main {
2.2.3、接口设计
@FeignClient(value = "cloud-payment-service")
@Component
public interface PaymentService {
@GetMapping(value = "/payment/get/{id}")
Payment getPaymentById(@PathVariable("id") Long id);
}
@FeignClient绑定一个服务名
该接口需要注入到IOC容器、动态代理
@GetMapping与服务层的配置相同、
其实可以理解为是服务层接口的一个拓本、只是标注了@FeignClient使其多了一份职责。
至此、接口模块设计完成、然后在Feign消费模块引用即可
2.2Feign消费模块设计
我们只需要对以前的80端口消费模块进行一定修改即可、因为只是从restTemplate调用换成了接口调用
这里的POM文件同样需要引用Feign的依赖
但是、这里我们是引用的外部(@FeignClient)接口、所以我们的启动类上也不需要标注@EnableFeignClients注解、但需要配置@ComponentScan注解扫描接口模块内的标注了@Component的接口
启动类如下
@SpringBootApplication
@ComponentScan(basePackages = {"com.laoyang.inter","com.laoyang.feign"})
public class Fegin80 {
配置完成后、我们就可以像调用普通接口一样、调用远程服务了。
3、Feign拓展
3.1、开启日志系统
第一步、创建日志Bean
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
第二部、YML开启日志
level:
# feign日志以什么级别监控哪个接口
com.atguigu.springcloud.service.PaymentFeignService: debug