持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
OpenFeign最核心的作用是为 HTTP 形式的 Rest API提供了非常简洁高效的 RPC 调用方式
第一代采用feign,第二代采用openFeign
Openfeign客户端作用:是一个Web声明式的Http客户端远程远程调用工具,底层是封装HttpClient技术。
Openfeign属于SpringCloud自己研发,而feign是netflix 代码写法几乎是没有任何变化。
做一个订单获取会员信息使用Openfeign调用的例子。
spring-openfeign-parent---整个依赖父类
-----spring-service-api---开放的api接口 定义了接口没有任何代码业务实现。
--------spring-service-api-member---会员提供开放接口
--------spring-service-api-order---订单提供开放接口
-----spring-service-impl---对我们开放的api接口代码实现
--------spring-service-impl-member---会员提供开放接口
--------spring-service-impl-order---订单提供开放接口
微服务架构基本的样式 最大的优点能够对我们feign实现复用机制。
注意事项:feign如果请求参数没有加注解@RequestParam,默认POST请求发送 定义feign接口,获取用户信息。 @FeignClient(配置文件定义的服务名,spring.application.name) @GetMapping(接口映射地址)
@FeignClient("spring-member")
public interface MemberServiceFeign {
@GetMapping("/getUser")
String getUser(@RequestParam("userId") Integer userId);
}
微服务中命名不能有下划线 _
pom依赖中需要新增 openfeign-api
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.springcloud</groupId>
<artifactId>openfeign-api</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
application.yml配置文件: 新增feign配置
feign配置:
compression:
request:
# 压缩支持的MIME类型
mime-types: text/xml,application/xml,application/json
# 开启请求数据的压缩功能
enabled: true
# 数据压缩下限 1024标识传输数据大于1024 才会进行数据压缩(最小压缩值标准)
min-request-size: 1024
# 开启响应数据的压缩功能
response:
enabled: true
okhttp:
enabled: true
openfeign的配置类: 定义服务超时的时间,并设置连接池,提高连接效率
@Configuration
public class OpenfeignConfig {
@Bean
public okhttp3.OkHttpClient okHttpClient() {
return new okhttp3.OkHttpClient.Builder()
// 读取超时时间
.readTimeout(10, TimeUnit.SECONDS)
// 连接超时时间
.connectTimeout(10, TimeUnit.SECONDS)
// 写超时时间
.writeTimeout(10, TimeUnit.SECONDS)
// 设置连接池
.connectionPool(new ConnectionPool())
.build();
}
启动类加上注解@EnableFeignClients //启用OpenFeign