这里是【秒懂·云原生】,关注我学习云原生不迷路
如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位点赞评论收藏⭐️

专栏介绍

【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。

本期介绍

主要介绍Spring Cloud —— Feign调用微服务中的接口

文章目录

  • 专栏介绍
  • 本期介绍
  • Feign
    • 1)Httpclient
    • 2)Okhttp
    • 3)HttpURLConnection
    • 4)RestTemplate
    • 5) Feign
    • 在Spring Cloud中集成Feign
    • 使用Feign调用接口

Feign

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 服务的
方法,能够大大提高客户端的编写效率。

5) Feign

Feign 是一个声明式的 REST 客户端,它能让 REST 调用更
加简单。Feign 供了 HTTP 请求的模板,通过编写简单的接
口和插入注解,就可以定义好 HTTP 请求的参数、格式、地
址等信息。

而 Feign 则会完全代理 HTTP 请求,我们只需要像调用方法
一样调用它就可以完成服务请求及相关处理。

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

在Spring Cloud中集成Feign

在 Spring Cloud 中集成 Feign 的步骤相当简单,首先还是
加入 Feign 的依赖,代码如下所示。

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

在启动类上加 @EnableFeignClients 注解,如果你的 Feign
接口定义跟你的启动类不在同一个包名下,还需要制定扫描
的包名 @EnableFeignClients(basePackages=“…”),代
码如下所示。

@EnableFeignClients@EnableDiscoveryClient@SpringBootApplication public class WsOrderServerApplication { public static void main(String[] args) { SpringApplication.run(WsOrderServerApplication .class, args); } }

使用Feign调用接口

定义一个 Feign 的客户端,以接口形式存在,代码如下所
示。

Spring Cloud 在 Feign 的基础上做了扩展,可以让
Feign 支持 Spring MVC 的注解来调用,原生的 Feign 是
不支持 Spring MVC 注解的

@FeignClient(value = "ws-user-server") public interface UserRemoteClient { @GetMapping("/user/{id}") Map getuser(@PathVariable(name = "id") String id); }

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

  • 定义方法时直接复制接口的定义即可
  • 将接口单独抽出来定义,每写一个接口就要对应写一个 调用的 Client,后面打成公共的 jar,这样无论是哪个项目需要调用接口,只要引入公共的接口 SDK jar 即可, 不用重新定义一遍了。参考继承特性