一、介绍
- 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 "三、项目结构")三、项目结构

### [](#%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 "五、运行效果")五、运行效果
