SpringCloud组件Feign
fegin的介绍
feign: 假装,伪装,装作,捏造。
feign框架是一个Http请求轻量级框架,通过接口注解的方式调用Http请求。通过处理注解将请求模板化,实际调用的时候,传入参数,根据参数再应用到请求上,转化为真的请求。这样就是面向接口编程。
说白了,这个东西就像是“写轮眼”,给你制造了幻术,你虽然是调用的一个个接口,但是实际上还是调用的正的请求,和RestTemplate那一套类似。使用feign的调用感觉更简洁,而不是像之前的RestTemplate指定请求方法,传入参数,而是直接调用接口,给个参数完事。
open fegin:Spring Cloud对feign封装,封装就是要加强,卡卡西继承了带土的写轮眼,在某些能力进行了加强,发动神威的时候不需解除物体,而卡卡西 Cloud就在feign的基础增加了对Spring MVC的注解,例如@RequesMapping,更加有利于Spring家族的整合。
fegin的使用
SpringCloud组件的使用一般都是三部走: 增加依赖(可能有些依赖带了其他的依赖),配置文件,加注解
创建两个项目,一个是服务提供端,一个是服务消费端。
服务提供端user-provider
引入的依赖:
<-- web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<-- eureka客户端的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置文件设置:
eureka.client.service-url.defaultZone=http://euk1.com:7900/eureka/
server.port=81
spring.application.name=user-provider
服务提供端consumer
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<-- SpringCloud对Feign的封装 openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置文件
eureka.client.service-url.defaultZone=http://euk1.com:7900/eureka/
server.port=90
spring.application.name=consumer
在SpringBoot启动类增加注解: @EnableFeignClients
p端和c端搭建完成
开始使用Feign框架,新建一个user-api项目,也可以直接在p端完成下边的操作;
增加依赖:
<-- web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<-- eureka客户端的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
定义接口:ConsumerApi
@RequestMapping("/user")
public interface ConsumerApi {
@GetMapping("/isAlive")
String isAlive();
}
使用Maven执行install
将user-api项目的依赖引入到p端项目和c端项目中:
<!--引入user-Api-->
<dependency>
<groupId>com.zhy</groupId>
<artifactId>user-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在P端项目中实现user-api的接口:
@RestController
public class UserController implements ConsumerApi {
@Override
public String isAlive() {
return "isAlive";
}
}
在C端项目中通过接口来继承user-api的接口,在通过注解:@FeignClient(name = “user-provider”),将服务的调用指向了P端服务的实现。
@FeignClient(name = "user-provider")
public interface UserConsumerService extends ConsumerApi {
}
C端完成调用:
@RestController
public class ConsumerController {
@Autowired
UserConsumerService userConsumerService;
@GetMapping("/isAlive")
public String isAlive() {
return userConsumerService.isAlive();
}
}
调用过程