Fegin的应用

服务消费方基于rest的请求服务提供方的服务时,一种直接的方式就是自己拼接url,拼接参数然后实现服务调用,但每次服务调用都需要这样拼接,打码量复杂且不易维护,此时Feign诞生。
Feign 是一种声明式Web服务客户端,底层封装了对Rest技术的应用,通过Feign可以简化服务消费方对远程服务提供方法的调用实现。如图所示:
在这里插入图片描述

Feign 最早是由 Netflix 公司进行维护的,后来 Netflix 不再对其进行维护,最终 Feign 由社区进行维护,更名为 OpenFeign。

Feign应用实践

第一步:在服务消费方,添加项目依赖(SpringCloud团队基于OpenFeign研发了starter),代码如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

第二步:在启动类上添加@EnableFeignClients注解,代码如下:

@EnableFeignClients
@SpringBootApplication
public class NacosConsumerApplication {}

第三步:定义Http请求API,基于此API借助OpenFeign访问远端服务,代码如下:

@FeignClient(name=“nacos-provider”)//nacos-providers为服务提供者名称
@RestController
interface ConsumerHttpApi{
@GetMapping("/provider/echo/{string}")
public String echoMessage(@PathVariable(“string”) String string);
}

其中,@FeignClient描述的接口底层会为其创建实现类。
第四步:在FeignConsumerController中添加feign访问,代码如下:

@RestController
@RequestMapping("/consumer/feign/")
public class FeignConsumerController {

@Value("${spring.application.name}")
private String appName;

@Autowired
private ConsumerHttpApi consumerHttpApi;
/**基于feign方式的服务调用*/
@GetMapping
public String doFeignEcho(){
    return consumerHttpApi.echoMessage(appName);
}

}

第五步:启动消费者服务,在浏览器中直接通过feign客户端进行访问,如图所示(反复刷新检测其响应结果):

Feign 调用过程分析

Feign应用过程分析(底层逻辑先了解):

  1. 通过 @EnableFeignCleints 注解启动 Feign Starter 组件。
  2. Feign Starter 在项目启动过程中注册全局配置,扫描包下所有的 @FeignClient 接口类,并进行注册 IOC 容器。
  3. @FeignClient 接口类被注入时,通过 FactoryBean#getObject 返回动态代理对象。
  4. 接口被调用时被动态代理类逻辑拦截,将 @FeignClient 请求信息通过编码器生成 Request对象
  5. 请求对象经Ribbon进行负载均衡,挑选出一个健康的 Server 实例。
  6. 通过 Client 携带 Request 调用远端服务返回请求响应。
  7. 通过解码器生成 Response 返回客户端,将信息流解析成为接口返回数据。

Feign 配置增强分析

feign.client.config.default.read-timeout=1
feign.client.config.default.connect-timeout=1
feign.client.config.nacos-provider.read-timeout=1

例子

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值