SpringCloudAlibaba基础分享(四)

85 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

image.png

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