SpringCloud基础配置与一些注意事项(六)消费端熔断器配置

继续上一章,这里使用的熔断器是由feign内部提供的;(我感觉springcloud做的非常臃肿)

当调用服务端,久久没有得到相应的时候,我们应该让此次请求降级,实现降级的方法有 线程池和服务熔断的方式;

线程池的方式:是为每一个服务创建一个线程池,当调用某个服务的时候,如果出现了问题,那么该线程就不会归还到线程池,当线程池中的线程耗尽的时候,该服务自然不会再被访问到了,因为线程池中已经没有可供操作的线程了;

服务熔断的方式: Hystrix ; 当某项服务满足一定的条件后(一直无法访问等等) 再有线程访问该服务的时候,直接返回,执行降级方法;

继上一章,上一章在configuration类中注入了RestTemplate对象;
此时,将不需要再使用注入该对象;
需要再启动类上注解@EnableFeignClient @EnableCircuitBreaker
或者使用@SpringCloudApplication(包含@SpringBootApplciation和@EnableDiscoveryClient以及@EnableCircuitBreaker)
和 @EnableFeignClient即可
添加接口

package com.itheima.client;

import com.itheima.client.impl.UserClientFallBack;
import com.itheima.config.FeignConfig;
import com.itheima.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @author Administrator
 */
@Component
@FeignClient(value = "user-service",fallback = UserClientFallBack.class,configuration = FeignConfig.class)
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Integer id);
}

创建接口实现类UserClientFallBack

package com.itheima.client.impl;

import com.itheima.client.UserClient;
import com.itheima.pojo.User;
import org.springframework.stereotype.Component;

/**
 * @author Administrator
 */
@Component
public class UserClientFallBack implements UserClient {
    @Override
    public User findById(Integer id) {
        User user = new User();
        user.setUsername("用户查询出错");
        user.setId((long)id);
        return user;
    }
}

新建Controller用于测试

package com.itheima.controller;

import com.itheima.client.UserClient;
import com.itheima.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Administrator
 */
@RestController
@RequestMapping("/cf")
// ConsumerController 可以被完全替代, 里面的默认方法会被UserClient和UserClient的实现类替代
public class ConsumerFeignController {
    @Autowired
    private UserClient userClient;

    @GetMapping("/{id}")
    public User findById(@PathVariable("id") Integer id){
        return userClient.findById(id);
    }

}

配置文件中,配置

feign:
  hystrix:
    enabled: true # 开启hystrix的熔断功能 默认关闭
# 可选择配置项
# 配置熔断策略: 事实上timeoutinMiiliseconds 最大就是设置为2000,设置再大,从浏览器反馈的时间来看也是2秒,设置成500也可以;
hystrix:
  command:
    default:
      circuitBreaker:
        errorThresholdPercentage: 50 # 触发熔断错误比例阈值,默认值50%
        sleepWindowInMilliseconds: 10000 # 熔断后休眠时长,默认值5秒
        requestVolumeThreshold: 10 # 熔断触发最小请求次数,默认值是20
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 2000 # 熔断超时设置,默认为1秒

测试访问;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值