一、Feign
介绍
Feign
是
Netflflix
公司开源的轻量级
rest
客户端,使用
Feign
可以非常方便的实现
Http
客户端。
Spring Cloud
引入 Feign并且集成了
Ribbon
实现客户端负载均衡调用。
二、
Feign
测试
1
、在客户端添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring‐cloud‐starter‐openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign‐okhttp</artifactId>
</dependency>
2
、定义
FeignClient
接口
a、参考被调controller接口定义(
@RequestMapping("/cms/page"))
b、参考被调controller中方法的定义(
@GetMapping("/get/{id}"))
c、例子:(XcServiceList.XC_SERVICE_MANAGE_CMS为Eureka注册中心服务名)
@FeignClient(value = XcServiceList.XC_SERVICE_MANAGE_CMS)
public interface CmsPageClient {
@GetMapping("/cms/page/get/{id}")
public CmsPage findById(@PathVariable("id") String id);
}
3.
启动类添加
@EnableFeignClients
注解
4
、测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class FeignTest {
@Autowired CmsPageClient cmsPageClient;
@Test public void testFeign() {
//通过服务id调用cms的查询页面接口
CmsPage cmsPage = cmsPageClient.findById("5a754adf6abb500ad05688d9");
System.out.println(cmsPage);
}
}
5、Feign工作原理
Feign工作原理如下:
1、 启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并生成此接口的代理 对象
2、 @FeignClient(value = XcServiceList.XC_SERVICE_MANAGE_CMS)即指定了cms的服务名称,Feign会从注册中 心获取cms服务列表,并通过负载均衡算法进行服务调用。
3、在接口方法 中使用注解@GetMapping("/cms/page/get/{id}"),指定调用的url,Feign将根据url进行远程调 用。
6、Feign注意点
SpringCloud
对
Feign
进行了增强兼容了
SpringMVC
的注解 ,我们在使用
SpringMVC
的注解时需要注意:
1
、
feignClient
接口 有参数在参数必须加
@PathVariable("XXX")
和
@RequestParam("XXX")
2
、
feignClient
返回值为复杂对象时其类型必须有无参构造函数。