【Spring Cloud 系列】五、断路器(Hystrix)+ Ribbon (Hoxton.M3 版本)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 【Spring Cloud 系列】五、断路器(Hystrix)+ Ribbon (Hoxton.M3 版本)

本文是基于Hystrix+ Ribbon 实现断路器模式


环境:


IDEA
JDK1.8
Spring Cloud Hoxton.M3
Spring Boot 2.2.0


一、Hystrix简介


  背景:在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。

  解决:Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。在微服务架构中,一个请求需要调用多个服务是非常常见的较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值,能够在一个、或多个依赖同时出现问题时保证系统依然可用。


二、创建项目


1、File ----- New -----Project

image.png

2、Spring Initializr  ----- Next

image.png

3、等待创建项目中

image.png

4、输入 Group   和  Artifact

点击 Next

image.png

5、选择Hystric

image.png

6、点击 Finish 创建完成

image.png


三、完善项目


1、pom.xml增加依赖


<!-- spring-cloud-starter-netflix-hystrix -->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>


2、HystrixserverApplication增加@EnableHystrix注解开启Hystrix,并创建RestTemplate ,开启客户端负载均衡。


@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableHystrix
public class HystrixserverApplication {
  public static void main(String[] args) {
    SpringApplication.run(HystrixserverApplication.class, args);
  }
  @Bean
  @LoadBalanced
  RestTemplate restTemplate(){
    return new RestTemplate();
  }
}


3、配置文件


server.port=8765
spring.application.name=RibbonServer
#注册到服务中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#是否注册到eureka服务器,
eureka.client.registerWithEureka=true 
#是否从eureka服务器获取注册信息
eureka.client.fetchRegistry=true
#是否开启自我保护模式,默认为true。
eureka.server.enable-self-preservation=true


4、Controller


@RestController
public class HystrixController {
    @Autowired
    private HystrixService hystrixService;
    @RequestMapping("/gethystrix")
    public String getHystrix(String name){
       return hystrixService.getHystrix(name);
    }
}


5、Service


@RestController
public class HystrixController {
    @Autowired
    private HystrixService hystrixService;
    @RequestMapping("/gethystrix")
    public String getHystrix(String name){
       return hystrixService.getHystrix(name);
    }
}


6、Serviceimpl需要注入RestTemplate,


  Serviceimpl需要注入RestTemplate,在方法上添加 @HystrixCommand(fallbackMethod ="fallback")并指定fallbackMethod ,编写fallbackMethod方法,设置返回信息。@HystrixCommand该注解对该方法创建了熔断器的功能。

@Service
public class HystrixServiceImpl implements HystrixService {
    @Autowired
    RestTemplate restTemplate;
    @HystrixCommand(fallbackMethod ="fallback")
    @Override
    public String getHystrix(String name) {
        String result = restTemplate.getForObject("http://Client-Server1/test?name=" + name, String.class);
        return result;
    }
    public String fallback(String name){
        return "hi,"+name+",sorry,Hystrix Ribbon error!";
    }
}



四、运行项目


1、输入项目地址和参数


http://localhost:8765/gethystrix?name=123

  在CLIENT-SERVER1 和CLIENT-SERVER2两个项目都正常运行的情况下,实现负载均衡,返回结果如下

image.png

2、端口8762和8763来回切换,实现了负载均衡。

  现在关闭CLIENT-SERVER1 和CLIENT-SERVER2  再次访问接口,返回接口如下,进入了fallback方法,实现了短路,减少了因链接异常造成的线程阻塞问题,避免了容器线程的浪费。

image.png

  以上就是一个Spring Cloud 基于Hystrix+ Ribbon实现断路器模式的学习过程。欢迎交流学习。



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
Java UED 开发者
Spring Boot 降级功能的神秘面纱:Hystrix 与 Resilience4j 究竟藏着怎样的秘密?
【8月更文挑战第29天】在分布式系统中,服务稳定性至关重要。为应对故障,Spring Boot 提供了 Hystrix 和 Resilience4j 两种降级工具。Hystrix 作为 Netflix 的容错框架,通过隔离依赖、控制并发及降级机制增强系统稳定性;Resilience4j 则是一个轻量级库,提供丰富的降级策略。两者均可有效提升系统可靠性,具体选择取决于需求与场景。在面对服务故障时,合理运用这些工具能确保系统基本功能正常运作,优化用户体验。以上简介包括了两个工具的简单示例代码,帮助开发者更好地理解和应用。
70 0
|
3天前
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
15 5
|
4月前
|
设计模式 监控 Java
解析Spring Cloud中的断路器模式原理
解析Spring Cloud中的断路器模式原理
|
1月前
|
Java 关系型数据库 开发工具
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
本文提供了解决方案,如何在IDEA中创建Spring 2.X版本的项目并使用JDK8,尽管Spring 2.X已停止维护且IDEA不再直接支持,通过修改pom.xml或使用阿里云的国内源来创建项目。
63 0
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
|
2月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
153 23
|
2月前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
|
3月前
|
Java
SpringBoot和SpringCloud对应版本
SpringBoot和SpringCloud对应版本
83 0
|
5月前
|
负载均衡 算法 Java
Spring Cloud Netflix 之 Ribbon
Spring Cloud Netflix Ribbon是客户端负载均衡器,用于在微服务架构中分发请求。它与RestTemplate结合,自动在服务发现(如Eureka)注册的服务之间进行调用。配置包括在pom.xml中添加依赖,设置application.yml以连接Eureka服务器,并在配置类中创建@LoadBalanced的RestTemplate。通过这种方式,当调用如`/user/userInfoList`的接口时,Ribbon会自动处理到多个可用服务实例的负载均衡。
|
4月前
|
设计模式 监控 Java
深入理解Spring Cloud中的断路器模式
深入理解Spring Cloud中的断路器模式
|
4月前
|
JavaScript 安全 Java
Spring Boot中的版本兼容性处理
Spring Boot中的版本兼容性处理
下一篇
无影云桌面