ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

(三十八)java版spring cloud微服务架构b2b2c电子商务平台-Hystrix服务容错

2019-06-28 09:13:20  阅读:228  来源: 互联网

标签:降级 服务 getFallback Hystrix spring 执行 public b2b2c


应用场景

分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一种选择.

Hystrix的内部处理逻辑

构建Hystrix的Command对象, 调用执行方法.

Hystrix检查当前服务的熔断器开关是否开启, 若开启, 则执行降级服务getFallback方法.

若熔断器开关关闭, 则Hystrix检查当前服务的线程池是否能接收新的请求, 若超过线程池已满, 则执行降级服务getFallback方法.

若线程池接受请求, 则Hystrix开始执行服务调用具体逻辑run方法.

若服务执行失败, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.

若服务执行超时, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.

若服务执行成功, 返回正常结果.

若服务降级方法getFallback执行成功, 则返回降级结果.

若服务降级方法getFallback执行失败, 则抛出异常.

不多说先配置执行一波

Maven

     <!--断路由,服务容错保护-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
Java Code

public class BaseService {
    @Autowired
    protected RestTemplate restTemplate;
 
 
    protected static String SERVICE_BIZ = "http://service-biz";
 
    @Bean
    @LoadBalanced
        //开启负载均衡
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
 
 
}
 
 
/**
 * Created by gaomin on 2017/12/24.
 */
@Service
public class RestTemplateServiceImp extends BaseService implements RestTemplateService {
 
    @Override
    @HystrixCommand(fallbackMethod = "getBizSerivceDataErrorBack")
    public Object getBizSerivceData() {
        String url = SERVICE_BIZ+"/index/findUserMenuList";
        Map<String,Object> uriVariables = new HashMap<>();
        return restTemplate.getForObject(url,Object.class);
    }
 
    /**
     * getBizSerivceDataErrorBack 和 getBizSerivceData 参数要一样返回类型也要一样
     * 服务降级 SERVICE_BIZ服务挂了,自动走这个方法.适用于所有第三方
     * 调用别的服务时,如果别的服务未响应,会导致本服务请求阻塞,这个可以解决断路由保护
     * 直接返回error,默认请求时间2000毫秒
     * @return
     */
    public Object getBizSerivceDataErrorBack(){
        //可以重新请求,还可以继续降级 ....
        return null;
    }
 
}

标签:降级,服务,getFallback,Hystrix,spring,执行,public,b2b2c
来源: https://blog.csdn.net/vvx0206/article/details/93967079

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有