SpringCloud两种服务降级的方法

1.feign整合hystrix的降级

2.hystrix本身的降级

3.进行熔断的处理

package com.mcloud.nis.knowledge.feign;

import com.alibaba.fastjson.JSONObject;
import com.mcloud.nis.knowledge.feign.Impl.BasicSignFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * Created by 周建鹏
 * $ on 2019/10/18 $ 14:04
 * <p>
 * 调用体征基础服务信息
 */
第一种:
@FeignClient(name = "nis-signs", fallback = BasicSignFallBack.class) //依赖的服务
public interface BasicSignManager {
    /**
     * 获取生命体征的基础信息
     */
    @RequestMapping(value = "/confs/basics/signs", method = RequestMethod.GET)
    JSONObject getSignCode(@RequestParam String organCode);
}
package com.mcloud.nis.knowledge.feign.Impl;

import com.alibaba.fastjson.JSONObject;
import com.mcloud.nis.knowledge.constant.BizErrorCodeEnum;
import com.mcloud.nis.knowledge.feign.BasicSignManager;
import com.mcloud.nis.knowledge.service.impl.CatalogueLibraryServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * Created by 周建鹏
 * $ on 2019/11/5 $ 17:55
 * <p>
 * 生命体征服务降级处理类,一定要实现服务类的接口
 * <p/>
 */
@Component
public class BasicSignFallBack implements BasicSignManager {

    private static Logger logger = LoggerFactory.getLogger(BasicSignFallBack.class);

    @Override
    public JSONObject getSignCode(String organCode) {
        logger.warn("生命体征接口的降级处理:{}", JSONObject.toJSONString(organCode));
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code", "10001");
        jsonObject.put("error", BizErrorCodeEnum.NO_SERVICE);
        return jsonObject;
    }
}
第二种:
@ApiOperation(value = "获取生命体征", notes = "获取生命体征")
@ResponseBody
@GetMapping(value = "/getBasicSign")
@HystrixCommand(fallbackMethod = "getBasicSignByError")
public ServiceResult getBasicSign(@RequestParam String code) {
    try {
        CheckParameterUtls.checkNotNull(code, BizErrorCodeEnum.PARAMETER_IS_NULL);
        JSONObject signCode = basicSignManager.getSignCode(code);
        return ServiceResult.success(signCode);
    } catch (BizException e) {
        return ServiceResult.fail(e.getErrorCode().getErrorCode(), e.getErrorCode().getDescription());
    }
}

//https://blog.csdn.net/HUXU981598436/article/details/89316880
private ServiceResult getBasicSignByError(String code) {
    logger.info("生命体征入口controller中的降级方法:{}", JSONObject.toJSONString(code));
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("code", code);
    jsonObject.put("error", BizErrorCodeEnum.NO_SERVICE.getDescription());
    return ServiceResult.fail(Integer.parseInt(BizErrorCodeEnum.NO_SERVICE.getErrorCode()), BizErrorCodeEnum.NO_SERVICE.getDescription(), jsonObject);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Hystrix是一个开源的熔断器框架,它能够帮助开发者有效地处理服务依赖中的延迟和故障。熔断器的主要目的是在出现故障时提供一种优雅的降级机制,以避免整个系统的崩溃。 熔断和降级是Hystrix中两个重要的概念。 熔断(Circuit Breaker)指的是在服务出现故障或错误率过高时,自动地切换到指定的备用服务或返回事先定义好的错误结果,起到保护系统免受故障传播的影响的作用。当服务不可用或响应时间过长时,熔断器会打开,拒绝后续请求的访问,并尝试通过执行降级逻辑来快速响应客户端。一旦后续请求不再出现故障,熔断器将会进入半开状态,允许少量的请求通过以检测服务是否恢复正常。 降级(Degradation)指的是在系统资源不足或者高访问量时,服务降级会关闭一些不重要的功能,以保证系统核心功能的可用性和稳定性。降级可以通过阻止非必要的调用、减少资源的消耗以及返回默认值或缓存结果来实现。降级需要提前定义好一些备用的逻辑,一旦系统资源紧张,就可以立即启用降级逻辑来保障系统的可用性。 总而言之,熔断和降级都是为了保护系统免受故障的影响。熔断主要是针对服务故障和错误率过高的情况,通过切换到备用服务或返回错误结果来保护系统。降级主要是在系统资源紧张或高访问量的情况下,关闭一些不重要的功能来保证核心功能的可用性和稳定性。两者都是通过提前定义备用逻辑来保障系统的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值