SpringCloud实用篇02.md

Feign远程调用

使用Feign的步骤:

① 引入依赖
② 添加@EnableFeignClients注解
③ 编写FeignClient接口
④ 使用FeignClient中定义的方法代替RestTemplate
先来看我们以前利用RestTemplate发起远程调用的代码:
存在下面的问题:
•代码可读性差,编程体验不统一
•参数复杂URL难以维护
Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign
其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。

2.1.Feign替代RestTemplate

Fegin的使用步骤如下:

1)引入依赖

我们在需要远程调用的服务pom文件中引入feign的依赖:

org.springframework.cloud
spring-cloud-starter-openfeign

2)
在启动类加@EnableFeignClients

3)编写Feign的客户端

在order-service中新建一个接口,内容如下:
package cn.itcast.order.client;

import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(“userservice”)
public interface UserClient {
@GetMapping(“/user/{id}”)
User findById(@PathVariable(“id”) Long id);
}
这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如:

  • 服务名称:userservice
  • 请求方式:GET
  • 请求路径:/user/{id}
  • 请求参数:Long id
  • 返回值类型:User

这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。
image.png

实现基于抽取的最佳实践

1)抽取

首先创建一个module,命名为feign-api:
项目结构:
在feign-api中然后引入feign的starter依赖

org.springframework.cloud
spring-cloud-starter-openfeign

然后,order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中

2)在order-service中使用feign-api

首先,删除order-service中的UserClient、User、DefaultFeignConfiguration等类或接口。
在order-service的pom文件中中引入feign-api的依赖:

cn.itcast.demo
feign-api
1.0

修改order-service中的所有与上述三个组件有关的导包部分,改成导入feign-api中的包