第五章:SpringCloudRibbon&Hystrix小实例

简介: 1.添加pom org.springframework.cloud spring-cloud-starter-hystrix 2.

1.添加pom

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

2.启动类上添加注解

@EnableCircuitBreaker
附图:

img_b9cab9b0e8c1b31b2196299ac6fa8a18.png
image.png

3.在@RequestMapping上添加注解@HystrixCommand(fallbackMethod = "findByIdFallback")

附图:


img_a15fd40010f574fedfdb8f854be80893.png
image.png

源码:

package com.fantj.fantjconsumermovieribbon.controller;

import com.fantj.fantjconsumermovieribbon.entity.User;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * Created by Fant.J.
 * 2017/11/11 17:43
 */
@RestController
public class MovieController {
    @Autowired
    private RestTemplate template;

@HystrixCommand(fallbackMethod = "findByIdFallback")
@RequestMapping("/movie/{id}")
public User findById(@PathVariable Long id){
        return this.template.getForObject("http://provider-user3/simple/"+id,User.class);
    }

    public User findByIdFallback(Long id){
        User user = new User();
        user.setId(id);
        return user;
    }
}

其中,fallbackMethod = "findByIdFallback"表示断路器启用后调用findByIdFallback方法。
从代码中可以看出,我在这里是通过ribbon访问provider-user3/simple/"+id这个服务内容,如果正常访问的话,会调用provider-user3服务中的/simple/"+id方法。
eureka:

img_c7fb3b2db5acda1f677f5cde606a840d.png
image.png

1. 访问provider-user3/:
img_87dcf27740eb21d3af4cfe0b08ebcc3b.png
image.png
2. 访问hystrix:
img_f85a5d8371ab17ba00ecf41c804af8f9.png
image.png
3. 然后我停止provider-user3/服务:
img_2e1b2c1d945e0ebb5c36c6ab799f9a12.png
image.png
4. 最后访问hystrix:
img_a766aaeaad94a513cca281b063c3b3d0.png
image.png

说明我们的hystrix起到了作用。(调用了fallback方法)

小知识点

访问hystrix服务下的 /health 可以查看健康启动状况.

img_c95e3a0564751f980fe2c473a947ac38.png
image.png

  • 我在这里开启eureka、provider-user3/、Hystrix 三个服务,请求hystrix的health


    img_7e4a89c7e393f5f4d9f34b4668f14521.png
    image.png
  • 然后我关掉provider-user3服务,再请求/health


    img_99f78b5b9fcdbb8358f147c03b066f50.png
    image.png

    说明了hystrix已启用。

 "hystrix": {
    "status": "CIRCUIT_OPEN",
    "openCircuitBreakers": Array[1][
      "MovieController::findById"           //说明断路器回调到MovieController的findById方法。
    ]
  }

img_9f142ba7617a50fb550f6657297a4527.png
image.png

还有 /hystrix.stream监控信息(不用,会被dashboard代替)
img_6802c42b2576531831e33e498eb2bd54.png
image.png

注意
/health 必须要有actuator的依赖支持

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
相关文章
|
6月前
|
算法 Java UED
你的Spring Boot应用是否足够健壮?揭秘限流功能的实现秘诀
【8月更文挑战第29天】限流是保障服务稳定性的关键策略,通过限制单位时间内的请求数量防止服务过载。本文基于理论介绍,结合Spring Boot应用实例,展示了使用`@RateLimiter`注解和集成`Resilience4j`库实现限流的方法。无论采用哪种方式,都能有效控制请求速率,增强应用的健壮性和用户体验。通过这些示例,读者可以灵活选择适合自身需求的限流方案。
192 2
|
6月前
|
Java 开发者 Spring
Spring Boot大法好:解耦、隔离、异步,让代码‘活’起来,性能飙升的秘密武器!
【8月更文挑战第29天】解耦、隔离与异步是Spring Boot中的关键设计原则,能大幅提升软件的可维护性、扩展性和性能。本文通过示例代码详细探讨了这些原则的应用:依赖注入和面向接口编程实现解耦;模块化设计与配置文件实现隔离;`@Async`注解和`CompletableFuture`实现异步处理。综合运用这些原则,可以显著提升软件质量和性能,使系统更加健壮、灵活和高效。
81 0
|
9月前
|
设计模式 Java 测试技术
Spring状态机的实现原理和业务场景
**Spring State Machine**是Spring框架的一部分,它提供了一种实现状态机的方式,允许开发者定义状态机的状态、事件、行为和转换。状态机是一种计算模型,根据一系列规则从一个状态转移到另一个状态。【5月更文挑战第4天】
203 2
|
9月前
|
设计模式 缓存 监控
详细介绍Hystrix的概念、作用、使用方法
Hystrix 通过这些核心类和接口实现了断路器模式,提供了线程池隔离、请求缓存、服务降级等功能。每个命令在执行时都会被封装为一个 HystrixCommand 实例,并在一个独立的线程池中执行。
592 1
|
9月前
|
监控 微服务
Hystrix熔断器设计思想(学习笔记)附(服务监控hystrixDashboard识图)
Hystrix熔断器设计思想(学习笔记)附(服务监控hystrixDashboard识图)
74 0
|
JSON 算法 Java
Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(二))(JMeter模拟测试)
Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)(二)
|
监控 Java 应用服务中间件
Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(一))(JMeter模拟测试)
Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)(一)
SpringCloud学习(十三):Hystrix的服务降级实现
SpringCloud学习(十三):Hystrix的服务降级实现
143 0
SpringCloud学习(十三):Hystrix的服务降级实现
|
运维 微服务
SpringCloud学习(十四):Hystrix的服务熔断实现
熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。
184 0
SpringCloud学习(十四):Hystrix的服务熔断实现
|
设计模式 缓存 监控
【Hystrix技术指南】(7)故障切换的运作流程原理分析(含源码)
【Hystrix技术指南】(7)故障切换的运作流程原理分析(含源码)
308 0
【Hystrix技术指南】(7)故障切换的运作流程原理分析(含源码)