springcloud学习笔记之Feign组件

目录

一、feign简介应用

      1、feign的概念

      2、feign的使用

二、feign原理分析

      1、前言

      2、@EnableFeignClients注解

  2.1、@EnableFeignClients

  2.2、FeignClientsRegistrar类

  2.3、加载feign的配置信息

  2.4、注册FeignClient

  2.5、registerFeignClient

3、@FeignClient注解

    3.1 FeignClient注解使用

    3.2 @FeignClient的属性

    3.3 @FeignClient源码分析

 



一、feign简介应用

      1、feign的概念

             Feign是一个声明性的Web服务客户端。它使编写Web服务客户端变得更容易。feigin是一种模板化,声明式的http客户端,feign可以通过注解绑定到接口上来简化Http请求访问。与当我们访问别的服务端口的时候 大部分使用httpclient等请求进行调用不同,在eureka注册的服务,我们可以使用Feign 声明接口的形式来进行相关服务的调用,并提供了失败回退(其实是Hystrix组件的使用)。Feign只是一个便利的rest框架,简化调用,最后还是通过ribbon在注册服务器中找到服务实例,然后对请求进行分配。

      2、feign的使用

  •        maven依赖          
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
  •      主项目中添加@EnableFeignClients
@SpringBootApplication
//扫描项目下所有使用@FeignClient注解修饰的接口
@EnableFeignClients
@EnableEurekaClient
public class FeignApplication {

	public static void main(String[] args) {

		SpringApplication.run(FeignApplication.class, args);
	}

}
  •    使用feign调用微服务
//使用feignclien注解和SpringMVC相关的常用注解 声明一个feign接口 调用微服务信息
@FeignClient(value = "service-ribbon",url = "https://api.github.com",decode404 = false,
        fallback = MyFallback.class, fallbackFactory = MyFallBackFactory.class )
public interface SayHiFeign {

    @RequestMapping("/hi", method = RequestMethod.GET)
    String sayHi(@RequestParam(name="name",required = true) String name);
}

  如上便完成了使用feign完成别的为服务调用,是不是很简单。点击下载demo源码 feign组件使用demo

二、feign原理分析

      1、前言

                 通过如上的简单介绍我们大致了解了feign的概念以及如何在项目中进行使用,通过上面的观察以及使用,我们发现feign组件在springclound项目中使用是如此只简单:只需在项目的主启动类使用@EnableFeignClients注解,在服务接口类中使用@FeignClient修饰。下面我们就从这两个注解入手揭开feign的神秘面纱(貌似话说的有点大)。

      2、@EnableFeignClients注解

                    为了方便理解,我们在这里先不给出结论,直接从源码中一步一步分析代码,最后再给出结论。

             2.1、@EnableFeignClients

//运行时保留
@Retention(RetentionPolicy.RUNTIME)
//该注解用于修饰描述类、接口(包括注解类型) 或enum声明
@Target(ElementType.TYPE)
//可以生产api doc
@Documented
//这个比较重要使用注解修饰的项目 需要先初始化FeignClientsRegistrar该类 
@Import(FeignClientsRegistrar.class)
public @interface EnableFeignClients {

	//basePackages的别名
	String[] value() default {};

    //指定需要扫描的包名列表
	String[] basePackages() default {};

    //指定需要扫描的class列表信息
	Class<?>[] basePackageClasses() default {};

	//feign调用的配置信息类 该对象非常重要,
    //包含FeignClient需要的重试策略,超时策略,日志等配置,
    //如果某个服务没有设置, 则读取默认的配置。
  • 7
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值