一、Feign 概述
Feign 是一个声明式的 Web Service 客户端。它的出现使开发 Web Service 客户端变得很简单。使用 Feign 只需要创建一个接口加上对应的注解,比如:@FeignClient 注解。 Feign 有可插拔的注解,包括 Feign 注解和 AX-RS 注解。Feign 也支持编码器和解码器,Spring Cloud Open Feign 对 Feign 进行增强支持 Spring Mvc 注解,可以像 Spring Web 一样使用 HttpMessageConverters 等。
Feign 是一种声明式、模板化的 HTTP 客户端。在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问 HTTP 请求。
二、Feign 入门案例
此处以调用 Github API 查询服务为例。
1.引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.启动类加入如下注解:
/** 开启 Feign 扫描支持 */
@EnableFeignClients
3.Feign 接口编写
/**
* @Author:大漠知秋
* @Description:使用 Feign 访问 Github 查询 API
* @CreateDate:2:36 PM 2018/10/24
*/
@FeignClient(name = "github-client", url = "https://api.github.com")
public interface GitHubFeign {
@RequestMapping(
value = "/search/repositories",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_UTF8_VALUE
)
String searchRepo(@RequestParam("q") String q);
}
4.Controller
/**
* @Author
* @Description:使用 Feign 访问 Github 查询 API
* @CreateDate:2:42 PM 2018/10/24
*/
@RestController
@RequestMapping(
value = "/github",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE
)
public class GitHubController {
@Resource
private GitHubFeign gitHubFeign;
@RequestMapping(
value = "/search/repositories",
method = RequestMethod.GET
)
String searchRepo(@RequestParam("q") String q) {
return gitHubFeign.searchRepo(q);
}
}
五、结果
源码:https://github.com/gentoo111/demo-spring-cloud-finchley
我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!