这里是【秒懂·云原生】,关注我学习云原生不迷路
如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位点赞评论收藏⭐️
专栏介绍
【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。
本期介绍
主要介绍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 即可, 不用重新定义一遍了。参考继承特性