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

简介: 【Spring Cloud 系列】六、断路器(Hystrix)+ Feign(Hoxton.M3 版本)

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


环境:


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、选择Spring cloud Discovery -----Eureka Discovery Client---- Next

image.png

6、点击 Finish 创建完成

image.png


三、完善项目


1、完善pom.xml

<!-- spring-cloud-starter-eureka-client -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!-- spring-cloud-starter-openfeign -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- spring-boot-starter-web -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- spring-cloud-starter-netflix-hystrix -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>



2、HystrixserverFeignApplication增加注解,@EnableFeignClients 开启Feign的负载均衡功能


@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class HystrixserverFeignApplication {
  public static void main(String[] args) {
    SpringApplication.run(HystrixserverFeignApplication.class, args);
  }
}


3、设置配置文件


server.port=8766
spring.application.name=HystrixFeginServer
#注册到服务中心的地址
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
#打开Feign自带断路器
feign.hystrix.enabled=true


4、Controller


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


5、Service


  添加注解通过@FeignClient来指定我们调用哪个服务,前面启动了两个服务,都为Client-Server1,feign会通过服务名来调用服务。fallback 指定fallback的实现即可断路器功能,然后在接口的实现类中添加熔断逻辑。


@FeignClient(value = "Client-Server1",fallback = HystrixServiceImpl.class)
public interface HystrixService {
    @RequestMapping(value = "/test",method = RequestMethod.GET)
    String getHystrix(@RequestParam(value = "name")String name);
}


6、HystrixServiceImpl


  编写fallback的实现类中添加熔断逻辑。


@Component
public class HystrixServiceImpl implements HystrixService {
    @Override
    public String getHystrix(String name) {
        return "hi,"+name+",sorry,Hystrix Feign error!";
    }
}


四、运行项目


1、输入项目地址和参数


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

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



image.png

image.png



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


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

image.png

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


目录
相关文章
|
1月前
|
Java 关系型数据库 开发工具
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
本文提供了解决方案,如何在IDEA中创建Spring 2.X版本的项目并使用JDK8,尽管Spring 2.X已停止维护且IDEA不再直接支持,通过修改pom.xml或使用阿里云的国内源来创建项目。
82 0
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
|
2月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
168 23
|
2月前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
55 3
|
2月前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
|
2月前
|
Java API 开发者
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
454 0
|
4月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
508 15
|
4月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
112 3
|
4月前
|
消息中间件 Java Nacos
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
77 0
|
4月前
|
缓存 监控 Java
通用快照方案问题之Spring Boot Admin的定义如何解决
通用快照方案问题之Spring Boot Admin的定义如何解决
64 0