SpringCloud Hystrix实现容错和回退

为zuul添加回退

想要为Zuul添加回退,需要实现ZuulFallbackProvider接口,在实现类中,指定为哪个微服务提供回退,并提供一个ClientHttpResponse作为回退响应。
1.复制项目microservice-gateway-zuul,将ArtifactId修改为microservice-gateway-zuul-fallback。
2.编写zuul的回退类:

package com.xhx.springcloud.hystrix;

import com.alibaba.fastjson.JSONObject;
import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * xuhaixing
 * 2018/6/12 21:36
 */
@Component
public class ZuulFallBack implements FallbackProvider {
    @Override
    public String getRoute() {
        return "eureka-feign";  //服务id,可以用* 或者 null 代表所有服务都过滤
    }

    @Override
    public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
        return new ClientHttpResponse() {
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.OK; //请求网关成功了,所以是ok
            }

            @Override
            public int getRawStatusCode() throws IOException {
                return HttpStatus.OK.value();
            }

            @Override
            public String getStatusText() throws IOException {
                return HttpStatus.OK.getReasonPhrase();
            }

            @Override
            public void close() {

            }

            @Override
            public InputStream getBody() throws IOException {
                JSONObject json =new JSONObject();
                json.put("state","501");
                json.put("msg","后台接口错误");
                return new ByteArrayInputStream(json.toJSONString().getBytes("UTF-8")); //返回前端的内容
            }

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders httpHeaders = new HttpHeaders();
                httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8); //设置头
                return httpHeaders;
            }
        };
    }
}

原文地址:https://www.cnblogs.com/wuhen8866/p/11116195.html

时间: 2024-10-17 20:54:50

SpringCloud Hystrix实现容错和回退的相关文章

SpringCloud+Hystrix服务容错

Netflix Hystrix - 应对复杂分布式系统中的延时和故障容错 +应用场景 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一种选择 Hystrix的内部处理逻辑构建Hystrix的Command对象, 调用执行方法. Hystrix检查当前服务的熔断器开关是否开启, 若开启, 则执行降级服务getFallback方法. 若熔断器开关关闭, 则Hy

Hystrix服务容错处理(一)

在微服务架构中存在多个可直接调用的服务,这些服务若在调用时出现故障会导致连锁效应,也就是可能会让整个系统变得不可用,这种情况我们称之为服务雪崩效应. 如何避免服务雪崩效应?通过Hystrix就能够解决. 1.Hystrix Hystrix是Netflix针对微服务分布式系统采用的熔断保护中间件, 相当于电路中的保险 丝.在微服务架构下,很多服务都相互依赖,如果不能对依赖的服务进行隔离,那么服务 本身也有可能发生故障, Hystrix通过Hystrix Command对调用进行隔离, 这样可以阻止

springcloud hystrix(监控、熔断、降级)

spring cloud hystrix 简介 hystrix通过服务隔离.熔断(也可以称为断路).降级等手段控制依赖服务的延迟与失败. netflix hystrix 本篇中主要讲解对spring cloud 对hystrix的集成,至于如何单独使用hystrix可以参考我分享的pdf. spring cloud hystrix 引入依赖 ----------------------------------------------------------------- <!--hystrix-

Spring Cloud Hystrix - 服务容错

服务容错和Hystrix 在微服务架构中,由于某个服务的不可用导致一系列的服务崩溃,被称之为雪崩效应.所以防御服务的雪崩效应是必不可少的,在Spring Cloud中防雪崩的利器就是Hystrix,Spring Cloud Hystri是基于Netflix Hystrix实现的.Hystrix的目标在于通过控制那些访问远程系统.服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力.Hystrix 具备服务降级.服务容错.服务熔断.线程和信号隔离.请求缓存.请求合并以及服务监控等强大功能.

笔记:Spring Cloud Hystrix 服务容错保护

由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会因等待出现故障的依赖方响应形成任务积压,最终导致自身服务的瘫痪. 在微服务架构中,存在着大量的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定,为了解决这样的问题,产生了断路器等一系列的服务保护机制. 在分布式架构中

关于springcloud hystrix 执行 hystrix.stream 跳转失败的问题

经过观看网友的总结:应该时版本的问题.某些版本没有对/hystrix.stream进行配置 所以解决方案(网友答案): 需要配置类配置下面 @Bean public ServletRegistrationBean hystrixMetricsStreamServlet() { ServletRegistrationBean registration = new ServletRegistrationBean(new HystrixMetricsStreamServlet()); registra

Hystrix 服务容错

第一步: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> 第二步: @EnableCircuitBreaker 第三步: package com.example.order.controller; import com.netflix.h

SpringCloud——hystrix熔断器

Hystrix能做什么? 服务熔断.服务降级.服务限流.接近实时的监控... 参考:https://github.com/Netflix/Hystrix/wiki/How-To-Use 一旦调用服务方法失败并抛出了错误信息后,会自动调用 @HystrixCommand 标注好的 fallbackMethod 调用类中的指定方法. dashboard监控窗口: 7色,1圈,1线 配置 被监控端需要引入以下依赖 <!-- actuator监控信息完善 --> <dependency>

springCloud(11):使用Hystrix实现微服务的容错处理-简介与实现

一.问题引入 如果服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直到提供者响应或超时.在高负载场景下,如果不作任何处理,此类问题可能会导致服务消费者的资源耗尽甚至整个系统的崩溃. 1.1.雪崩效应 微服务架构的应用系统通常包含多个服务层.微服务之间通过网络进行通信,从而支撑起整个应用系统,因此,微服务之间难免存在依赖关系.任何微服务都并非100%可用,网络往往也很脆弱,因此难免有些请求会失败. 我们通常把"基础服务故障"导致"级联故障"的现象称为雪