Spring Cloud从入门到放弃(七):Spring Cloud OpenFeign组件

前言

Spring Cloud系列文章大多是有联系的,最好是从第一篇开始看起

Spring Cloud系列: 点击查看Spring Cloud系列文章


调用接口的方法

java项目调用接口一般有以下几种方法

1、Httpclient
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包,并且它支持 HTTP 协议最新版本和建议。

HttpClient 相比传统 JDK 自带的 URLConnection,提升了易用性和灵活性,使客户端发送 HTTP 请求变得容易,提高了开发的效率。

2、Okhttp
一个处理网络请求的开源项目,是安卓端最火的轻量级框架,由 Square 公司贡献,用于替代 HttpUrlConnection 和 Apache HttpClient。OkHttp 拥有简洁的 API、高效的性能,并支持多种协议(HTTP/2 和 SPDY)。

3、HttpURLConnection
HttpURLConnection 是 Java 的标准类,它继承自 URLConnection,可用于向指定网站发送 GET 请求、POST 请求。HttpURLConnection 使用比较复杂,不像 HttpClient 那样容易使用。

4、RestTemplate
RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程 HTTP 服务的方法,能够大大提高客户端的编写效率。

除了上面的方法,还有一种 更简单方便的方法,那就是Feign 。


Feign

Feign 是一个声明式的 REST 客户端,它能让 REST 调用更加简单。Feign 提供了 HTTP 请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。而 Feign 则会完全代理 HTTP 请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。

Spring Cloud 对 Feign 进行了封装,使其支持 SpringMVC 标准注解和 HttpMessageConverters。Feign 可以与 Eureka 和 Ribbon 组合使用以支持负载均衡。

Feign和OpenFeign的区别

Feign 是 spring cloud 组件中的一个轻量级 RESTful 的HTTP 服务客户端 Reign 内置了 Ribbon, 用来做客户端服务在均衡,去调用服务注册中心的服务,Feign 的使用方式是:使用Feign 注解自定义接口,调用这个接口,就可以低哦啊用服务注册中心的服务。

openfeign 是 spring cloud 在 feign 的基础上支持 spring mvc 注解 ,如 @RequestMapping 等等,OpenFeign 的 @FeignClient 可以解析Spring MVC 的 @RequestMapping 注解下的接口,并通过动态代理的方式生产实现类 ,实现类中做负载均衡并且低哦用其他服务。
OpenFeign也是默认集成了Ribbon


Spring Cloud OpenFeign

Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。我们只需要通过创建接口并用注解来配置它既可完成对Web服务接口的绑定。它具备可插拔的注解支持,包括Feign注解、JAX-RS注解。它也支持可插拔的编码器和解码器。Spring Cloud集成了Eureka和Spring Cloud LoadBalancer,以在使用Feign时提供负载平衡的http客户端。

Spring Cloud中集成Feign

1、添加依赖

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

2、在启动类上添加@EnableFeignClients 注解,用于扫描定义的Feign 接口

@SpringBootApplication
@EnableFeignClients
public class ConsumersDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumersDemoApplication.class, args);
    }

}

如果你的Feign 接口不在启动类的包下,还需要定义扫描路径

如:

@EnableFeignClients(basePackages = "com.Feign .api")

至此,我们就可以使用Feign调用接口了

Feign调用接口

3、定义Feign接口

@FeignClient("EUREKA-CLIENT-SERVICE")
public interface FeignClientInterface {

    @GetMapping("/hello")
    String hello();
}

说明:
@FeignClient注解标识这是一个Feign 的客户端,value 属性是对应的服务名称,也就是你需要调用哪个服务中的接口。

接口方法的定义跟实际方法定义一样即可,即入参、出参和名称相同即可。

调用FeignClientInterface 接口中的hello方法,就相当于调用http://EUREKA-CLIENT-SERVICE/hello

调用FeignClient接口,我们只需要在调用的类上注入FeignClient接口,然后执行相应的方法即可,如下

@SpringBootTest
class ConsumersDemoApplicationTests {
   @Autowired
    private FeignClientInterface feignClientInterface;


    @Test
    void testMethod(){
        String result = feignClientInterface.hello();
        System.out.println(result);
    }
}

成功输出hello


@FeignClient注解属性

以下是FeignClient 的定义

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FeignClient {

	@AliasFor("name")
	String value() default "";

	@Deprecated
	String serviceId() default "";

	String contextId() default "";

	@AliasFor("value")
	String name() default "";

	String qualifier() default "";

	String url() default "";

	boolean decode404() default false;

	
	Class<?>[] configuration() default {};

	Class<?> fallback() default void.class;

	Class<?> fallbackFactory() default void.class;

	String path() default "";

	boolean primary() default true;

}

FeignClient属性

name和value
从源码可以得知,name是value的别名,value也是name的别名。两者的作用是一致的,name指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现。

url
url属性一般用于调试程序,允许我们手动指定@FeignClient调用的地址

decode404
当发生http 404错误时,如果该字段为true,会调用decoder进行解码,否则抛出FeignException。

configuration
用于指明FeignClient的配置类,默认的配置类为FeignClientsConfiguration类。,在缺省情况下,这个类注入了默认的Decoder、Encoder和Constant等配置的bean。


Feign配置文件配置

feignName表示服务的名称,如果想设置全局配置,只需要换成feign.client.config.default 即可

# 链接超时时间
feign.client.config.feignName.connectTimeout=5000
# 读取超时时间
feign.client.config.feignName.readTimeout=5000
# 日志等级
feign.client.config.feignName.loggerLevel=full
#开启压缩
feign.compression.request.enabled=true
feign.compression.response.enabled=true
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值