我使用的是maven聚合
一、引入依赖
先在父工程的pom.xml中引入springcloud坐标
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
然后在服务模块的pom.xml中引入(负载均衡器,是在发请求时对于多个服务实例进行负载均衡)
<!--openFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--负载均衡器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
二、启用OpenFeign
在服务的启动类上加 @EnableFeignClients注解
三、编写OpenFeign客服端 (FeignClient)
定义一个新的接口,例如:
-
@FeignClient("item-service")
:声明服务名称 -
@GetMapping
:声明请求方式 -
@GetMapping("/items")
:声明请求路径 -
@RequestParam("ids") Collection<Long> ids
:声明请求参数(这里传递了一个集合) -
List<ItemDTO>
:返回值类型
OpenFeign就可以利用动态代理帮我们实现这两个方法
三、使用FeignClient
接下来就和平时一样调用就可以了

四、使用带有连接池的客户端来代替默认的HttpURLConnection
OpenFeign的http客户端默认用的是HttpURLConnection,其不支持连接池。
因为连接池可以减少创建链接的开销,并且快速请求响应
这里我改成了OKHttp,支持连接池
1.引入坐标
<!--OK http 的依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
2.开启连接池
在application.yml中
feign:
okhttp:
enabled: true # 开启OKHttp功能
五、定义OpenFeign 日志
OpenFeign 默认是NONE级别,不记录任何日志
-
NONE:不记录任何日志信息,这是默认值。
-
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
-
HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
-
FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
如果我们需要调试代码查看输出日志,则需要修改日志级别
1.新建一个配置类例如:
package com.hmall.api.config;
import feign.Logger;
import org.springframework.context.annotation.Bean;
public class DefaultFeignConfig {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.FULL;
}
}
2.配置让其修改生效
在启动类的@EnableFeignClients中添加defaultConfiguration 配置
package com.hmall.cart;
import com.hmall.api.config.DefaultFeignConfig;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class) //开启openFeign 并且扫描公共api模块的的包
@MapperScan("com.hmall.cart.mapper")
@SpringBootApplication
public class CartApplication {
public static void main(String[] args) {
SpringApplication.run(CartApplication.class,args);
}
}