文档章节

spring cloud RestTemplate消费者使用Hystrix进行容错和服务降级

黄威
 黄威
发布于 2018/06/07 15:44
字数 370
阅读 295
收藏 4

spring cloud RestTemplate消费者使用Hystrix进行容错和服务降级

(1)消费者如下

@RestController
public class DcController {

    @Autowired
    ConsumerService consumerService;

    @GetMapping("/consumer")
    public String dc(Boolean delay) {
        return consumerService.consumer(delay);
    }

    @Service
    class ConsumerService {

        @Autowired
        RestTemplate restTemplate;

        @HystrixCommand(fallbackMethod = "fallback")
        public String consumer(Boolean delay) {
            System.out.println("consumer delay :" + delay);
            return restTemplate.getForObject("http://eureka-client/dc" + (null == delay ? "" : "?delay=" + delay), String.class);
        }

        public String fallback(Boolean delay) {
            System.out.println("fallback delay :" + delay);
            return "fallbck22";
        }

    }

要解决的问题:

(a)降级方法可以重定向吗?

可以.

?a 借助于org.springframework.web.client.RestTemplate

 public String fallback(Boolean delay) {
            
            return restTemplate.getForObject("http://eureka-client/client/hello/json",String.class);
        }

?b 使用HttpServletResponse

@RestController
public class DcController {

    @Autowired
    ConsumerService consumerService;

    @GetMapping("/consumer")
    public String dc(Boolean delay,
                     HttpServletRequest request,
                     HttpServletResponse response) {
        return consumerService.consumer(delay,
                 request,
                 response);
    }

    @Service
    class ConsumerService {
        @Autowired
        RestTemplate restTemplate;

        @HystrixCommand(fallbackMethod = "fallback")
        public String consumer(Boolean delay,
                               HttpServletRequest request,
                               HttpServletResponse response) {
            System.out.println("consumer delay :" + delay);
            return restTemplate.getForObject("http://eureka-client/dc" + (null == delay ? "" : "?delay=" + delay), String.class);
        }

        public String fallback(Boolean delay,
                               HttpServletRequest request,
                               HttpServletResponse response) {
            System.out.println("fallback delay :" + delay);
            try {
                response.sendRedirect("error2.jsp");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

}

(b)降级的标准如何设置(重写)

设置调用者执行的超时时间(单位毫秒)

默认值:1000

// 设置所有实例的默认值
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=...
// 设置实例HystrixCommandKey的此属性值
hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds=...

注意事项:

(1)真实方法和降级方法除了方法名称不同,其他签名信息必须完全一样

例如consumer 有一个参数,那么fallback也必须有一个参数,否则报错:

 

(2)注解@HystrixCommand 不能加在控制器层,而应该加在Service 层

所以才专门抽取了一个Service 类:ConsumerService

(3)

代码:

https://github.com/liuyu520/SpringCloud-Learning-Dalston-/tree/master/eureka-consumer-ribbon-hystrix

 

© 著作权归作者所有

黄威
粉丝 24
博文 67
码字总数 38638
作品 0
昌平
程序员
私信 提问
白话SpringCloud | 第五章:服务容错保护(Hystrix)

前言 前一章节,我们知道了如何利用+和的方式进行服务的调用。在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如网络原因或者服务提供者自身...

oKong
2018/09/23
561
0
跟我学Spring Cloud(Finchley版)-13-通用方式使用Hystrix

本节详细讲解使用Hystrix的通用方式。 简介 Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要...

周立_ITMuch
01/19
54
2
Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel

本文对Hystrix、Resilience4j、Sentinel进行对比,并探讨如何使用一行代码将Hystrix迁移到Sentinel。 作者:洛夜,校对:周立 在本博客首发,欢迎转载。 前段时间,Netflix宣布Hystrix进入维...

周立_ITMuch
01/28
1K
7
Spring Cloud Finchley.SR1 的学习与应用 7 - 服务容错保护 Hystrix

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

张shieppp
2018/11/21
76
0
Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel

本文对Hystrix、Resilience4j、Sentinel进行对比,并探讨如何使用一行代码这种极简的方式,将Hystrix迁移到Sentinel。 Hystrix 自从前段时间 宣布停止维护之后,社区推荐了 resilience4j。这...

中间件小哥
02/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
41
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部