[TOC]
## **1.Feign的作用**
1. Feign是Netflix公司开源的轻量级Rest(https://github.com/OpenFeign/feign ),使用 Feign 可以非常方便、简单的实现 Http 客户端,使用 Feign 只需要定义一个接口,然后在接口上添加注解即可。
2. Spring Cloud 对 Feign 进行了封装,***Feign 默认集成了 Ribbon 实现了客户端负载均衡调用。***
* **微服务间的调用就有两种方式:**
1\. 通过微服务名称,获得服务的调用地址
2\. 通过接口+注解,获得服务的调用 ——Feign (为适应业界其它程序员提出的,还是遵循面向接口编程)
类似于以前Mapper接口上使用@Mapper注解进行标识,而使用Feign就只要在接口上标注@FeignClient注解。
## **2. Feign使用**
Feign是发起调用,所以依然在服务消费端配置
**1. 在消费端pom引入Feign启动器依赖**
```
<!--feign 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
```
**2. 新建 ProductClientService 接口**
新建 ProductClientService 接口,**使用 @FeignClient("服务名称")** 注解标识,来指定调用哪个服务 比如:在代码中调用了 MICROSERVICE-PRODUCT 服务的 /product/list 、/product/get/{id}、/product/add 接口,代码如下:
~~~
@FeignClient(value = "microservice-product") //指定调用的微服务名称
public interface ProductClientService {
@RequestMapping(value = "/product/add", method = RequestMethod.POST)
boolean add(@RequestBody Product product);
@RequestMapping(value = "/product/get/{id}", method = RequestMethod.GET)
Product get(@PathVariable("id") Long id);
@RequestMapping(value = "/product/list", method = RequestMethod.GET)
List<Product> list();
}
~~~
**3. controller直接利用service调用服务提供端即可**
![](https://img.kancloud.cn/16/47/16473e8c56a97ed1f17f38a2d7168dfc_968x231.png)
**4. 修改启动类**
添加注解 : @EnableFeignClients
~~~
@SpringBootApplication
@EnableFeignClients(basePackages = "com.tuna.springcloud.consumer.service")
@EnableEurekaClient //标识 是一个Eureka客户端,测试没有这个注解也可以
public class ProductConsumer_80 {
public static void main(String[] args) {
SpringApplication.run(ProductConsumer_80.class, args);
}
}
~~~
测试
[http://localhost/consumer/product/get/1](http://localhost/consumer/product/get/1)
可以正常负载
![](https://img.kancloud.cn/f9/77/f97716578def47ff1ea8c353db4a256f_528x141.png)![](https://img.kancloud.cn/ff/d5/ffd573fd09a929095909d80f9b150112_499x119.png)
## **3. Feign原理**
1. 启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并生成此接口的代理 对象
2. @FeignClient("服务名称 ") 即指定了 product 服务名称,Feign会从Eureka注册中心获取 product 服务列表, 并通过**负载均衡算法进行服务调用.**
3. 在接口方法中使用注解 @RequestMapping(value = "/product/list",method = RequestMethod.GET),指定调 用的url,Feign 会根据url进行远程调用
## **4. Feign注意事项**
SpringCloud对Feign进行了增强兼容了SpringMVC的注解 ,我们在使用SpringMVC的注解时需要注意:
1. @FeignClient接口方法有基本类型参数在参数必须加@PathVariable("XXX") 或 @RequestParam("XXX")
2. @FeignClient接口方法返回值为复杂对象时,此类型必须有无参构造方法。
- springcloud
- springcloud的作用
- springboot服务提供者和消费者
- Eureka
- ribbon
- Feign
- feign在微服务中的使用
- feign充当http请求工具
- Hystrix 熔断器
- Zuul 路由网关
- Spring Cloud Config 分布式配置中心
- config介绍与配置
- Spring Cloud Config 配置实战
- Spring Cloud Bus
- gateway
- 概念讲解
- 实例
- GateWay
- 统一日志追踪
- 分布式锁
- 1.redis
- springcloud Alibaba
- 1. Nacos
- 1.1 安装
- 1.2 特性
- 1.3 实例
- 1. 整合nacos服务发现
- 2. 整合nacos配置功能
- 1.4 生产部署方案
- 环境隔离
- 原理讲解
- 1. 服务发现
- 2. sentinel
- 3. Seata事务
- CAP理论
- 3.1 安装
- 分布式协议
- 4.熔断和降级
- springcloud与alibba
- oauth
- 1. abstract
- 2. oauth2 in micro-service
- 微服务框架付费
- SkyWalking
- 介绍与相关资料
- APM系统简单对比(zipkin,pinpoint和skywalking)
- server安装部署
- agent安装
- 日志清理
- 统一日志中心
- docker安装部署
- 安装部署
- elasticsearch 7.x
- logstash 7.x
- kibana 7.x
- ES索引管理
- 定时清理数据
- index Lifecycle Management
- 没数据排查思路
- ELK自身组件监控
- 多租户方案
- 慢查询sql
- 日志审计
- 开发
- 登录认证
- 链路追踪
- elk
- Filebeat
- Filebeat基础
- Filebeat安装部署
- 多行消息Multiline
- how Filebeat works
- Logstash
- 安装
- rpm安装
- docker安装Logstash
- grok调试
- Grok语法调试
- Grok常用表达式
- 配置中常见判断
- filter提取器
- elasticsearch
- 安装
- rpm安装
- docker安装es
- 使用
- 概念
- 基础
- 中文分词
- 统计
- 排序
- 倒排与正排索引
- 自定义dynamic
- 练习
- nested object
- 父子关系模型
- 高亮
- 搜索提示
- kibana
- 安装
- docker安装
- rpm安装
- 整合
- 收集日志
- 慢sql
- 日志审计s
- 云
- 分布式架构
- 分布式锁
- Redis实现
- redisson
- 熔断和降级