Spring Cloud全解析:服务调用之Feign简介



Feign简介

Feign是Netflix开发的一个声明式的HTTP客户端(远程服务调用组件),只需要接口+注解即可完成对于微服务的调用,不需要使用RestTemplate+Ribbon来对微服务进行访问,简化了编程,其是基于动态代理机制,目标是减少HTTP调用的复杂性

依赖

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

feign底层

feign底层默认使用的是jdk原生的URLConnection发送http请求,没有连接池,可以使用Apache的HttpClient来替换Feign原始的httpClient,使用连接池。通过动态代理的方式来构建Http请求

配置启动类

@SpringBootApplication
@EnableEurekaClient
// 启动feign,会进行对FeignClient的扫描加载
@EnableFeignClients(basePackages = "com.zhanghe.study")
public class ConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApp.class,args);
    }
}

feign接口编写

// value中为所要访问的微服务
@FeignClient(value = "MICRO-SERVICE-DEPT-PROVIDER")
public interface DeptClient {

    @RequestMapping(value = "/dept/get/{id}",method = RequestMethod.GET)
    public Dept get(@PathVariable("id") long id);
}

直接调用该方法就可以调用该微服务的接口

@FeignClient参数说明

首先主程序入口添加了@EnableFeignClients注解开启对FeignClient扫描加载处理,否则无法加载@FeignClient注解所标注的接口

public @interface FeignClient {
  	// 指定了FeignClient的名称,如果使用了Ribbon,该值就是微服务的名称,用于服务发现
    @AliasFor("name")
    String value() default "";

    /** @deprecated */
    @Deprecated
    String serviceId() default "";
		// 指定了FeignClient的名称,如果使用了Ribbon,name就是微服务的名称,用于服务发现,且会作为bean的名称,如果该服务内有多个调用某个微服务的feign接口,可以使用value,而不使用name
    @AliasFor("value")
    String name() default "";

    String qualifier() default "";
		// 指定调用的地址,一般不使用该参数,而使用微服务的名称调用
    String url() default "";
		// 当发生404时,如果该字段为true,会调用decoder进行解码,否则抛出FeignException
    boolean decode404() default false;
		// 指定Feign的配置类,可以在Feign的配置类中自定义Feign的Encoder、Decoder、LogLevel、Contract
    Class<?>[] configuration() default {};
		// 失败回调,用于容错
    Class<?> fallback() default void.class;
		// 工厂生成fallback类实例,可以生成每个接口通用的容错逻辑
    Class<?> fallbackFactory() default void.class;
		// 定义当前FeignClient的统一前缀
    String path() default "";

    boolean primary() default true;
}

参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾光师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值