简介
在项目中我们有时候需要调用第三方的API,微服务架构中这种情况则更是无法避免——各个微服务之间通信。比如一般的项目中,有时候我们会使用 HTTP Client 发送 HTTP 请求来进行调用,而在微服务架构,Spring Cloud 全家桶中,Spring Cloud Feign 则是更常见的选择。那么,我如何只使用 Spring Cloud Feign 而不引入整个 Spring Cloud 呢?
什么是Feign?
Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。
而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix,可以让我们不再需要显式地使用这两个组件。
总起来说,Feign具有如下特性:
- 可插拔的注解支持,包括Feign注解和JAX-RS注解;
- 支持可插拔的HTTP编码器和解码器;
- 支持Hystrix和它的Fallback;
- 支持Ribbon的负载均衡;
- 支持HTTP请求和响应的压缩。
这看起来有点像我们springmvc模式的Controller层的RequestMapping映射。这种模式是我们非常喜欢的。Feign是用@FeignClient来映射服务的。
首先找一个AIP
免费的API特别多,github上也有免费API地址汇总的repo,但这些都太正式了。有趣的事物总是会相互吸引的,无意间我发现了这么一个网站,“渣男:说话的艺术”(lovelive.tools) ,每次请求都可以获取一句甜言蜜语(渣男语录),特别良心的是,作者提供了API列表,给作者点赞!
如何调用第三方服务?
首先,我们先快速构建一个 Spring Boot 的 web 项目,这里我就省略了。然后在pom中添加feign的相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
然后,在启动类添加响应的注解 @EnableFeignClients:
@SpringBootApplication
@EnableFeignClients
public class SpringbootMiddlewareFeignApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMiddlewareFeignApplication.class, args);
}
}
接着,我们便可以配置我们的 Client 了,我们先创建一个接口类,比如叫BadGuyFeignClient ,并声明为 FeignClient:
@FeignClient
public interface BadGuyFeignClient {
}