OpenFeign客户端

106 阅读2分钟

一、介绍

  • SpringCloud第一代采用feign,第二代采用OpenFeign
  • OpenFeign是一个Web声明式的Http客户端调用工具,提供接口和注解形式调用。底层封装的是httpclient技术
  • Openfeign是springCloud自己研发的。而feign是netflix研发的,自2016年之后不再维护了

二、使用时的注意事项

  • 如果请求参数中没有指定注解的话,默认发送的是post请求。所以如果要发get请求,需要在参数上加@RequestParam注解
  • feign客户端支持负载均衡,用的ribbon
  • 在微服务中服务的名称不能带下划线

| 1 2 3 4 5 6 7 8 9 10 | ``` @FeignClient("tinner-member") public interface UserServiceFeign { /** * 提供发布接口 * @param userId * @return */ @GetMapping("/getUser") String getUser(@RequestParam("userId") Integer userId); }

| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

### [](#%E4%B8%89%E3%80%81%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84 "三、项目结构")三、项目结构

![项目结构](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d67f70ed83e244c2bbcb572e49d24353~tplv-k3u1fbpfcp-zoom-1.image)

### [](#%E5%9B%9B%E3%80%81%E4%BB%A3%E7%A0%81 "四、代码")四、代码

#### [](#1%E3%80%81%E7%88%B6pom%E6%96%87%E4%BB%B6 "1、父pom文件")1、父pom文件

| ```
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 
``` | ```
<parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>2.0.0.RELEASE</version>     </parent>      <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>         <!--服务注册与发现-->         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>             <version>0.2.2.RELEASE</version>         </dependency>         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-openfeign</artifactId>             <version>2.0.0.RELEASE</version>         </dependency>     </dependencies> 
``` |
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

#### [](#2%E3%80%81%E4%BC%9A%E5%91%98%E6%9C%8D%E5%8A%A1%E6%8E%A5%E5%8F%A3UserService "2、会员服务接口UserService")2、会员服务接口UserService

| ```
1 2 3 4 5 6 7 8 9 10 11 
``` | ```
public interface UserService {      /**      * 提供会员接口      *      * @param userId      * @return      */     @GetMapping("/getUser")     String getUser(@RequestParam("userId") Long userId); } 
``` |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

#### [](#3%E3%80%81%E4%BC%9A%E5%91%98%E6%9C%8D%E5%8A%A1%E5%AE%9E%E7%8E%B0%E7%B1%BBUserServiceImpl "3、会员服务实现类UserServiceImpl")3、会员服务实现类UserServiceImpl

| ```
1 2 3 4 5 6 7 8 9 
``` | ```
@RestController public class UserServiceImpl implements UserService {      @Override     public String getUser(Integer userId) {         return "我是会员服务";     } }  
``` |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

#### [](#4%E3%80%81%E8%AE%A2%E5%8D%95%E6%9C%8D%E5%8A%A1OrderServiceImpl "4、订单服务OrderServiceImpl")4、订单服务OrderServiceImpl

| ```
1 2 3 4 5 6 7 8 9 10 11 12 
``` | ```
@RestController public class OrderServiceImpl {      @Autowired     private UserServiceFeign userServiceFeign;      @RequestMapping("/orderFeignToUser")     public String orderFeignToUser(){         String user = userServiceFeign.getUser(1);         return "我是订单服务调用会员服务的接口,返回结果:"+ user;     } } 
``` |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

#### [](#5%E3%80%81feign%E5%AE%A2%E6%88%B7%E7%AB%AF "5、feign客户端")5、feign客户端

| ```
1 2 3 4 5 6 7 8 9 10 
``` | ```
@FeignClient("tinner-member") public interface UserServiceFeign {     /**      * 提供发布接口      * @param userId      * @return      */     @GetMapping("/getUser")     String getUser(@RequestParam("userId") Integer userId); } 
``` |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

### [](#%E4%BA%94%E3%80%81%E8%BF%90%E8%A1%8C%E6%95%88%E6%9E%9C "五、运行效果")五、运行效果

![项目结构](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a9b9a5188a9d468b86098c4eefcf098e~tplv-k3u1fbpfcp-zoom-1.image)