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


相关文章
|
6天前
服务熔断器-Hystrix
服务熔断器-Hystrix
25 2
|
6天前
SpringCloud服务已经关但是Eureka还是显示up
SpringCloud服务已经关但是Eureka还是显示up
27 0
|
6天前
|
存储 SpringCloudAlibaba Java
【微服务 SpringCloud】实用篇 · 服务拆分和远程调用
【微服务 SpringCloud】实用篇 · 服务拆分和远程调用
21 2
|
6天前
|
监控 Java API
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
18 2
|
6天前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
6天前
|
监控 Java 微服务
第八章 Spring Cloud 之 Hystrix
第八章 Spring Cloud 之 Hystrix
17 0
|
6天前
Springcloud-ribbon和hystrix配置
Springcloud-ribbon和hystrix配置
10 0
|
6月前
|
缓存 运维 监控
微服务技术系列教程(22) - SpringCloud- 服务保护机制Hystrix
微服务技术系列教程(22) - SpringCloud- 服务保护机制Hystrix
62 0
|
7月前
|
缓存 监控 Java
12SpringCloud - 断路器(Hystrix)引入
12SpringCloud - 断路器(Hystrix)引入
32 0
|
7月前
|
Java 微服务 Spring
Spring Cloud Hystrix简单实用
Spring Cloud Hystrix简单实用
64 0