赞
踩
1、Nacus 服务搭建及使用
2、Nacos 配置中心
3、Nacos 服务注册与发现之OpenFeign服务间调用
4、Spring Security & Oauth2 认证授权
5、网关(Gateway / Sentinel)路由及熔断限流
6、网关(Gateway自定义断言和过滤器)
在 《Nacos服务搭建及使用》中,对Nacos的服务搭建与调用基本操作做了简单的介绍,服务调用也是用RestTemplate实现服务间的调用,这篇讲的是另一种调用方法,OpenFeign 的服务间调用的基本方式。
在说 OpenFeign 介绍之前,必须先提一嘴 Feign,什么是 Feign?Feign 是Netflix 开发的声明式、模板化的 HTTP 客户端,可以帮助我们更便捷的调用 HTTP api,具有可插入的注解支持,使用起来方便。
OpenFeign 则是 Spring Cloud 下的一个组件,对 Feign 进行了增强,使其支持 Spring MVC注解,还整合了 Ribbon & Eureka 和 断路器,以在使用 Feign 时提供了负载均衡的 HTTP 客户端。
OpenFeign 的使用特别简单,但是 OpenFeign 的功能非常强大,只需要映入 OpenFeign 的依赖,然后进行配置,通过 Spring Boot 的自动装配就可以在应用中起到作用了。
加入 OpenFeign 依赖,版本用父pom统一管理。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
启用 OpenFeign,是 OpenFeign 在项目中可用,启动方式只需要在启动类上加上注解 @EnableFeignClients 即可。
这样就可以在项目总使用 OpenFeign调用其他服务API 了。
@SpringBootApplication
@EnableFeignClients
public class HomeApplication {
public static void main(String[] args) {
SpringApplication.run(HomeApplication.class, args);
}
}
Logger.Level 总共有 4 个级别,分别是:
1、NONE:性能最佳,适用于生产
2、BASIC:使用与生产环境追踪问题
3、HEADERS:BASIC 之上,仅仅记录 请求头 响应头
4、FULL:适合开发测试,打印 请求 相应 body 信息
配置方式可在配置类中配置,也可在配置文件中配置,也可以支持局部配置,见 下面 调用服务 配置。
配置文件配置如下:
@Bean
public Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
配置文件配置如下:
支持局部配置,针对某一个服务配置,home-server 是服务名称。
feign:
client:
config:
home-server:
loggerLevel: BASIC
Spring Cloud 在 原生的 Feign 上面做了扩展,可以让 Feign 支持 Spring MVC 注解来调用,原生的 Feign 不支持 Spring MVC 注解,如果想用原生的 Feign 配置,可以通过配置契约来改变。
原生的 Feign 只支持 @RequestLine(“GET /list”) 的方式。
配置类方式如下:
@Bean
public Contract feignContract(){
return new Contract.Default();
}
配置文件配置如下:
feign:
client:
config:
contract: feign.Contract.Default
配置 超时 时间为,连接 5 秒超时,读取数据 10 秒超时,并且超时跳转。
配置类配置:
@Bean
public Request.Options feignOptions(){
return new Request.Options(5, TimeUnit.SECONDS, 10, TimeUnit.SECONDS, true);
}
配置文件配置:
feign:
client:
config:
home-server:
loggerLevel: BASIC
contract: feign.Contract.Default
connectTimeout: 5000
readTimeout: 10000
配置一个基本权限过滤器,调用的时候需要带上 username,password 才可以访问成功,这里是BasicAuthRequestInterceptor 内置的 拦截器。
此拦截器作用是向请求头添加 Authorization 参数,值是由 username,password 生成的编码。
配置类配置:
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor(){
return new BasicAuthRequestInterceptor("yphen", "132456");
}
在被调用方打印请求头参数:
也可以自定义,只需要 实现 RequestInterceptor 接口然后配置即可。
public class FeignUserInfoRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
String access_token = UUID.randomUUID().toString();
template.header("Authorization",access_token);
}
}
配置文件配置:
feign:
client:
config:
home-server:
connectTimeout: 5000
readTimeout: 10000
requestInterceptors[0]: com.home.interceptors.FeignUserInfoRequestInterceptor
使用注解 @FeignClient 加上 Spring MVC 的注解 @RequestMapping 就可以方便的调用其他服务的 API 了。
configuration 针对此调用服务配置 OpenFeign 配置,局部配置。
实例中调用了 user-server 服务中的 /user/uMessage 接口。
@FeignClient(value = "user-server", path = "/user", configuration = OpenFeignConfig.class)
public interface MessageService {
@RequestMapping(value = "uMessages", method = RequestMethod.GET)
String list();
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。