SpringCloud 微服务架构(15)- 基于 Feign的熔断配置

1 基于 Feign的熔断配置

SpringCloud Fegin默认已为Feign整合了hystrix,所以添加Feign依赖后就不用在添加hystri
在这里插入图片描述

1.1 案例

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

  • IProductFeignClient
package com.tzb.order.feign;

import com.tzb.order.entity.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * 声明需要调用的微服务的名称
 */
@FeignClient(name="service-product")
public interface IProductFeignClient {

    // 配置需要调用的微服务接口
    @GetMapping("/product/{id}")
    public Product findById(@PathVariable Long id);
}

1.1.1 开启 hystrix 支持

  • application.yml
server:
    port: 8082
spring:
    application:
        name: service-order #服务名称
    datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/springcloud_shop?useUnicode=true&characterEncoding=utf8
        username: root
        password: root
    jpa:
        database: MySQL
        show-sql: true
        open-in-view: true

eureka:
    client:
        service-url:
            defaultZone: http://localhost:9000/eureka/
    instance:
        prefer-ip-address: true # 使用 ip 地址注册

# 配置 feign 日志输出
# NONE:不输出日志, BASIC:适用于生产环境追踪问题
# HEADERS: 在 BASIC 的基础上,记录请求和响应的头信息, FULL:记录所有
feign:
    client:
        config:
            service-product: # 需要调用的服务名称
                loggerLevel: FULL
    #开启对 hystrix 的支持
    hystrix:
      enabled: true
logging:
    level:
        com.tzb.order.feign.IProductFeignClient: debug

1.1.2 自定义实现类(熔断触发的降级逻辑)

在这里插入图片描述

package com.tzb.order.feign;

import com.tzb.order.entity.Product;
import org.springframework.stereotype.Component;


@Component
public class ProductFeignClientCallback implements IProductFeignClient {

    /**
     * 熔断降级的方法
     *
     * @param id
     * @return
     */
    @Override
    public Product findById(Long id) {
        Product product = new Product();
        product.setProductName("feign 调用触发了熔断降级的方法");
        return product;
    }
}


1.1.3 feignClient 接口添加降级方法的支持

在这里插入图片描述

package com.tzb.order.feign;

import com.tzb.order.entity.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * 声明需要调用的微服务的名称
 * name: 服务提供者的名称
 * fallback : 配置熔断发生的降级方法实现类
 */
@FeignClient(name = "service-product", fallback = ProductFeignClientCallback.class)
public interface IProductFeignClient {

    // 配置需要调用的微服务接口
    @GetMapping("/product/{id}")
    public Product findById(@PathVariable Long id);
}


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

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页