feign 是netflix 提供的申明式的httpclient调用框架
整合方法
1.添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2.在application 添加注解
@EnableFeignClients
3.编写调用代码
@FeignClient(name = "jpaas-form") public interface FormClient { /** * 根据表单别名获取表单相关数据。 * @param alias * @param pk * @param initPermission * @return */ @GetMapping("/form/core/formPc/getByAlias") JsonResult<BpmView> getByAlias(@RequestParam(value = "alias") String alias, @RequestParam(value = "pk")String pk, @RequestParam(value = "initPermission") Boolean initPermission);
1.添加一个接口类。
2.增加@FeignClient 注解
name 指向需要调用的 微服务名称
3.增加调用方法
遵循 mvc的写法,如果返回的数据是一个java对象,最好把这个实体做成公共的类,供被调用者和调用者进行使用。
@GetMapping("/users/{id}")
UserDTO findById(@PathVariable Integer id);
方法示例,和spring mvc 差不多。
4.自定义FEIGN日志级别
feign 日志级别,就是需要打印feign的调用参数和响应数据。
使用java代码来实现。
1.编写配置类
import feign.Logger; import org.springframework.context.annotation.Bean; public class UserCenterFeignClientConfig { @Bean public Logger.Level level(){ return Logger.Level.FULL; } }
2.feign client 类指定配置
@FeignClient(name = "user-center", // fallback = UserCenterFeignClientFallback.class, // fallbackFactory = UserCenterFeignClientFallbackFactory.class, configuration = UserCenterFeignClientConfig.class ) public interface UserCenterFeignClient {
3.在日志中进行指定
编辑 application.yml
logging: level: com.demo.contentcenter.feignclient.UserCenterFeignClient: debug
注意这个日志界别需要为 debug 级别,只有在debug模式才会输出feign日志。
4. feign 多参数请求实现
请参考文章
http://www.imooc.com/article/289000
5.使用 feign 访问非 注册服务数据
有些情况下,我们使用feign 访问外部url,比如访问 博客网首页。
编写代码:
@FeignClient(name = "cnblogs", url = "https://www.cnblogs.com")
public interface ExternalFeignClient {
@GetMapping("/yg_zhang")
String index();
}
这里需要指定 name 和URL地址。
6.性能优化
配置启用http连接池:
<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> <version>10.2.3</version> </dependency>
修改 application.yml
feign: client: config: # 全局配置 default: loggerLevel: basic httpclient: enabled: true max-connections: 200 max-connections-per-route: 50
7.feign 的常见问题
http://www.imooc.com/article/289005