<2>Springcloud中使用Hystrix注解方式实现服务降级、熔断、隔离

简介: 首先在parent的pom.xml 中添加Hystrix相关依赖

在上一篇博客搭建的项目基础上:https://blog.csdn.net/qq_41890624/article/details/103663817



首先在parent的pom.xml 中添加Hystrix相关依赖


<!-- hystrix断路器 -->
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  </dependency>
在order-service-impl 项目的配置文件中添加开启Hystrix
feign:
  hystrix:
    enabled: true
在项目的OrderServiceImpl类中添加三个方法测试
package com.vhukze.order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.vhukze.api.entity.UserEntity;
@RestController
public class OrderServiceImpl implements IOrderService{
  @Autowired
  private MemberServiceFeign feign;
  @RequestMapping("toMember")
  public String toMember(String name) {
  // TODO Auto-generated method stub
  System.out.println("当前线程名称:"+Thread.currentThread().getName());
  UserEntity user = feign.getMember(name);
  return user.toString();
  }
  @RequestMapping("toMemberHystrix")
  @HystrixCommand(fallbackMethod="fallbackMethod")
//此注解默认开启服务熔断、服务降级(指定降级使用的方法名称)、线程池隔离
  public String toMemberHystrix(String name) {
  // TODO Auto-generated method stub
  System.out.println("当前线程名称:"+Thread.currentThread().getName());
  UserEntity user = feign.getMember(name);
  return user.toString();
  }
  public String fallbackMethod(String data) {
  return "服务降级,稍后重试";
  }
}


fallbackMethod指定的方法需要带一个参数,不然会报错fallback method wasn't found: fallbackMethod([class java.lang.String])



现在访问http://localhost:8020/toMemberHystrix?name=22会出现服务降级的提示,因为getMember 方法中设置了线程等待1.5秒。Hystrix超时时间没有设置。


设置Hystrix的超时时间


#### hystrix禁止服务超时时间
hystrix:  
 command: 
   default: 
      execution: 
       timeout: 
        enabled: false

此时可以正常访问。



然后我们使用压力测试工具Jmeter设置200个线程循环访问访问http://localhost:8020/toMemberHystrix?name=22


再使用浏览器访问该接口,便会出现服务降级,稍后重试的字样。


但是访问http://localhost:8020/toMember?name=22还是可以正常访问,说明开启了线程池隔离机制。


相关文章
|
4月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
232 23
|
4月前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
69 3
|
5月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
WXM
|
5月前
|
存储 缓存 Java
WXM
|
5月前
|
前端开发 程序员
|
6月前
|
监控 Java 开发者
Spring Cloud中的服务熔断与降级
Spring Cloud中的服务熔断与降级
|
6月前
|
Java 微服务 Spring
【spring cloud】注解@SpringCloudApplication和@SpringBootApplication的区别
【spring cloud】注解@SpringCloudApplication和@SpringBootApplication的区别
119 0
|
缓存 运维 监控
微服务技术系列教程(22) - SpringCloud- 服务保护机制Hystrix
微服务技术系列教程(22) - SpringCloud- 服务保护机制Hystrix
117 0
|
7月前
springCloud之服务降级熔断Hystrix、OpenFeign
springCloud之服务降级熔断Hystrix、OpenFeign
396 0
|
8月前
|
监控 Java API
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
100 2