Java 为什么是hystrix或任何其他微服务断路器?

Java 为什么是hystrix或任何其他微服务断路器?,java,spring,spring-boot,microservices,hystrix,Java,Spring,Spring Boot,Microservices,Hystrix,我正在用SpringBoot和SpringCloud开发微服务。我开始了解hystrix和断路器模式。我知道,断路器用于在下游微服务出错时以备用响应进行响应,我依赖这些微服务获取数据。我的问题是,如果我没有任何有意义的替代响应,为什么我需要一个断路器呢?简短回答:主要是为了停止复杂分布式系统中的级联故障 我没有任何有意义的替代回答,为什么 我需要一个断路器吗 只有当您的服务器只提供一个REST端点(和一个HTTP谓词)时,这个问题才相关。但几乎总是这样,情况并非如此。即使是“微”服务也将有多个端

我正在用SpringBoot和SpringCloud开发微服务。我开始了解hystrix和断路器模式。我知道,断路器用于在下游微服务出错时以备用响应进行响应,我依赖这些微服务获取数据。我的问题是,如果我没有任何有意义的替代响应,为什么我需要一个断路器呢?

简短回答:主要是为了停止复杂分布式系统中的级联故障

我没有任何有意义的替代回答,为什么 我需要一个断路器吗

只有当您的服务器只提供一个REST端点(和一个HTTP谓词)时,这个问题才相关。但几乎总是这样,情况并非如此。即使是“微”服务也将有多个端点+多个http谓词的组合。您不希望一个端点挂断在一个缓慢的上游服务上,在线程一直等待并最终导致整个应用程序崩溃之后,线程堆积

看一看这位官员

希斯特里克斯是干什么的? ---Hystrix设计用于执行以下操作:

  • 通过第三方访问的依赖项(通常通过网络)提供保护并控制延迟和故障
    客户端库
  • 停止复杂分布式系统中的级联故障
  • 快速故障和快速恢复
  • 在可能的情况下,撤退并优雅地降级
  • 实现近实时监控、警报和操作控制

“在可能的情况下,回退并优雅地降级”只是hystrix提供的功能之一。

如果您重构monolith应用程序以将其拆分为多个微服务,hystrix也可能有用。 在将其投入生产时,您可能希望将旧的monolith代码保留一段时间作为替代响应。因此,如果微服务不可用,只会执行旧代码,因此基本上可以降低风险。如果一切正常,您可以从monolith中删除旧代码并继续使用微服务

通过扩展HystrixCommand类,可以很容易地做到这一点

public class MicroserviceCommand extends HystrixCommand<String>
{
    @Override
    protected String run()
    {
        //return response from your new microservice
    }

    @Override
    protected String getFallback()
    {
        //microservice is not available, 
        //so execute old code which was not removed from application yet
    }
}
公共类微服务命令扩展HystrixCommand
{
@凌驾
受保护的字符串运行()
{
//从新的微服务返回响应
}
@凌驾
受保护的字符串getFallback()
{
//微服务不可用,
//所以,执行尚未从应用程序中删除的旧代码
}
}