Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求,这整个调用过程和Dubbo的RPC非常类似。开发起来非常的优雅。
org.springframework.cloud
spring-cloud-starter-feign
2.入口程序上增加@EnableFeignClients注解
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class MicroserviceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(MicroserviceConsumerApplication.class, args);
}
}
3.编写接口
// microservice-provider:映射的微服务的虚拟的地址
@FeignClient("microservice-provider")
public interface UserFeignClient {
@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
// 有两个坑:
//1. @GetMapping不支持,必须直接写出提交的方式是get还是post的
//2. @PathVariable得设置value
//只要参数是复杂对象,即使指定了是GET方法,feign依然会以POST方法进行发送请求。如下
//成功
@RequestMapping(value = "/user", method = RequestMethod.POST)
public User postUser(@RequestBody User user);
//失败
// @RequestMapping(value = "/get-user", method = RequestMethod.GET)
// public User getUser(User user);
//}
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("/movief/{id}")
public User findByFeginId(@PathVariable Long id) {
return userFeignClient.findById(id);
}
2.添加配置文件
@Configuration
@ExcludeFromComponentScan
public class FeignConfiguration1 {
//这里我们改为了feign的原生容器,则在接口中就不能使用springmvc的注解,要使用feign的原生注解
@Bean
public Contract feignContract() {
return new Contract.Default();
}
//配置fegin的日志级别,要使得日志生效,还得再application.yml中添加配置,见下方feign的日志使用
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
3.修改接口文件
@FeignClient(name = "microservice-provider", configuration = FeignConfiguration1.class)
public interface UserFeignClient {
//由于FeignConfiguration1中使用原生的容器,这里要使用原生feign注解
//@RequestLine(请求方式+" "+请求路径)
//参数必须加上@Param注解
@RequestLine("GET /simple/{id}")
public User findById(@Param("id") Long id);
}
1.首先在application.yml添加如下配置
logging:
level:
com.spongebob.cloud.microserviceconsumer.fegin: DEBUG
2.其次在FeignConfiguration1 文件中添加日志要监控的级别,如上全部监控。
1.Feign 内嵌入了Ribbon 的依赖,不需要再引入依赖
2.在application.xml配置文件中添加如下配置
microservice-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #采用轮询
#请求和响应GZIP压缩支持
feign.compression.request.enabled=true
feign.compression.response.enabled=true