原创

openfeign 使用

温馨提示:
本文最后更新于 2025年09月08日,已超过 278 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

对于 自身系统中的方法调用-> 直接复制方法签名。

客户端负载均衡与服务端负载均衡

openfeign 的日志

yml中配置参数

logging:
  level:
    feign: debug

加入配置类

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

超时控制

连接超时 默认时间 10s  

读取超时 默认 60s

yml中 相关的参数设置

spring:
  cloud:
    openfeign:
      client:
        config:
          default:
            connect-timeout: 1000
            read-timeout: 1000
          service-product:
            logger-level: full
            connect-timeout: 3000
            read-timeout: 3000
    #            有精确的设置 使用精确设置,没有 就使用 默认的


重试机制

添加 配置类 到spring中,其中 参数 可不传 ,也可 自定义

    @Bean
    Retryer retryer() {
        return new Retryer.Default(100L, 1000L, 3);
    }


请求拦截器 和 相应拦截器

在 发请求的模块中 ,添加 请求拦截器 ,该组件 会 自动 被扫描到(功能:在请求头中 添加token参数)

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;

import java.util.UUID;

@Component
public class XTokenRequestInterceptor implements RequestInterceptor {
    /**
     * 请求拦截器
     *
     * @param requestTemplate
     */
    @Override
    public void apply(RequestTemplate requestTemplate) {
        System.out.println("请求拦截器 启动");
        requestTemplate.header("X-Token", UUID.randomUUID().toString());
    }
}
<br/>

兜底回调

创建 兜底回调类


import org.example.feign.ProductFeignClient;
import org.example.product.bean.Product;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;

@Component
public class ProductFeignClientFallBack implements ProductFeignClient {


    @Override
    public Product getProductById(Long id) {
        System.out.println("服务调用失败,返回默认值");
        Product product = new Product();
        product.setId(0L);
        product.setPrice(new BigDecimal("00"));
        product.setProdctName("Apple");
        product.setNum(0);
        return product;
    }
}


在yml中 配置启动 

feign:
  sentinel:
    enabled: true

在 接口中 标注  兜底回调类

@FeignClient(value = "service-product", fallback = ProductFeignClientFallBack.class) //feign 客户端


正文到此结束