使用OpenFeign 进行服务之间的调用

我使用的是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);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值