七天学会SpringCloud分布式微服务——05——OpenFeign

1、OpenFeign实现远程调用

在这里插入图片描述

1.1 services.pom引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

1.2 在service-order微服务中新建feign.ProductFeignClient.java

在这里插入图片描述

package com.zhenbang.feign;

import com.zhenbang.product.bean.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient("service-product")   // feign客户端
public interface ProductFeignClient {


    // MVC注解的两套使用逻辑
    // 1、标注在Controller ,是接受这样的请求
    // 2、标注在FeignClient,是发送这样的请求
    @GetMapping("/product/{id}")
    Product getProductById(@PathVariable("id") Long id);


}

  • 这里需要说明@FeignClient注解的Value值是要调用的微服务名字
  • @GetMapping请求,要调用的product-service微服务的controller函数,此处在controller中复制

1.3 注入以及调用

@Resource
ProductFeignClient productFeignClient;
 Product productFromRemote = productFeignClient.getProductById(productId);

2、OpenFeign调用详细日志实现

在这里插入图片描述

3、OpenFeign超时控制

在这里插入图片描述
在这里插入图片描述

  • 连接超时和读取超时
  • 默认时间分别是 10s 和 60s
  • 超时配置
    在这里插入图片描述

4、OpenFeign重试机制

在这里插入图片描述

  • 默认没有重试
  • 可以设置重试(100ms,1s,5)
    最大重复次数5次、如果相隔时间超过1s,不再重试,第2次是100ms,第三次是100ms*1.5

增加一个重试配置类

**加粗样式**

package com.zhenbang.config;

import feign.Retryer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class RetryerConfig {
    @Bean
    Retryer retryer(){
        return new Retryer.Default();// 这个放那三个参数
    }
}

5、OepenFeign配置拦截器

在这里插入图片描述
以请求拦截器为例

5.1 请求拦截器java文件

在这里插入图片描述
java文件

package com.zhenbang.interceptor;

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

import java.util.UUID;
/*拦截器使用的第二种方式*/
@Component
public class TokenRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        System.out.println("拦截器启动");
        /*为这次请求头种添加token信息*/
        // 主要是
        requestTemplate.header("X-Token", UUID.randomUUID().toString());
    }
}

5.2 拦截器配置使用

方法一:在yml文件中
在这里插入图片描述
方法二:拦截器加Component组件
在这里插入图片描述
这里使用第2种方式

6、OpenFeign兜底返回Fallback

在这里插入图片描述

6.1 编写回调函数

在这里插入图片描述

6.2 ProductFeignClientFallback.java

package com.zhenbang.feign.fallback;
import java.math.BigDecimal;

import com.zhenbang.feign.ProductFeignClient;
import com.zhenbang.product.bean.Product;
@Component
public class ProductFeignClientFallback implements ProductFeignClient {


    @Override
    public Product getProductById(Long id) {
        System.out.println("回调兜底");
        Product product = new Product();
        product.setId(id);
        product.setPrice(new BigDecimal("0"));
        product.setProductName("");
        product.setNum(0);
        return product; // 如果调用失败,就走回调这个逻辑,返回空值
    }
}

6.3 service.pom引入Sentinel依赖

     <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

6.4 yml开启Sentinel功能

在这里插入图片描述

  • feign用Sentinel开启熔断功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值