强更微服务,大家多多支持!!!
Feign是Netflix开发的声明式,模板化的HTTP客户端,其灵感来自Retrofit,JAXRS-2.0以及WebSocket.
Feign可帮助我们更加便捷,优雅的调用HTTP API。
在SpringCloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。
Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
换成我的话就是,在消费者项目中添加feign并声明一下你要用提供者里面的要使用的接口,就可以像调用工具类一样便捷。
Feign原理参考:https://www.jianshu.com/p/e0218c142d03
org.springframework.cloud
spring-cloud-starter-feign
1.4.0.RELEASE
在启动类上添加注解@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class, args);
}
}
@FeignClient(value="eureka-client-user-service",configuration=FeignConfiguration.class)
public interface UserRemoteClient {
@GetMapping("/user/hello")
String hello();
}
@RestController
public class ArticleController {
@Autowired
private RestTemplate restTemplate;
@Autowired
UserRemoteClient userRemoteClient;
@GetMapping("/article/callhello2")
public String callHello2() {
return restTemplate.getForObject("http://eureka-client-user-service/user/hello", String.class);
}
@GetMapping("/article/callhello3")
public String callHello3() {
return userRemoteClient.hello();
}
}
可以通过callHello2() 、callHello3()看出两者调用的差别,使用Feign更加便捷。
为了更加方便的监控接口的调用情况,可以通过feign日志,打印出接口的传输情况。
Fiegn分为:
NONE:不输出日志
BASIC:只输出请求方法的URL和响应的状态码以及接口执行的时间。
HEADERS:将BASIC信息和请求头信息输出。
FULL:输出完整的请求信息。
@Configuration
public class FeignConfiguration {
/**
* feign的日志级别
* @return
*/
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
并且在FeignClient中添加FeignConfiguration 的扫描
@FeignClient(value="eureka-client-user-service",configuration=FeignConfiguration.class)
application.properties中添加Feign的配置
#指定feign的日志级别
#连接超时
feign.client.config.default.connectTimeout=5000
#读取超时
feign.client.config.default.readTimeout: 5000
#日志等级
feign.client.config.default.loggerLevel: basic
Feign可以配置Basic,能访问有权限限制的接口。在FeignConfiguration中添加
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor("user","password");
}
还可以自定义拦截器。
这个配置可以提高请求与响应的效率,当Feign 是okhttp3,压缩不会生效。
feign.httpclient.enable=true
feign.okhttp.enable=false
feign.compression.request.enabled=true
feign.compression.response.enabled=true
ok,就先这么多,拜拜哦