<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还是可以正常访问,说明开启了线程池隔离机制。


相关文章
|
1月前
|
存储 数据可视化 Java
基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪
Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。
103 1
|
9天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
38 3
|
2月前
|
消息中间件 存储 Java
SpringCloud基础9——服务异步通信-高级篇
消息可靠性、死信交换机、惰性队列、MQ集群
SpringCloud基础9——服务异步通信-高级篇
|
2月前
|
存储 NoSQL 调度
|
2月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
165 23
|
2月前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
56 1
|
缓存 运维 监控
微服务技术系列教程(22) - SpringCloud- 服务保护机制Hystrix
微服务技术系列教程(22) - SpringCloud- 服务保护机制Hystrix
106 0
|
5月前
springCloud之服务降级熔断Hystrix、OpenFeign
springCloud之服务降级熔断Hystrix、OpenFeign
332 0
|
6月前
|
监控 Java API
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
62 2
|
2月前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
53 3