Spring Cloud Hystrix快速入门demo

1.什么是Spring Cloud Hystrix?

Spring Cloud Hystrix 是一个用于处理分布式系统中故障的库。它实现了熔断器模式,可以防止由于故障服务的连锁反应而导致整个系统崩溃。Spring Cloud Hystrix 提供了丰富的功能,如熔断、降级、限流、缓存等,可以帮助开发人员更好地处理分布式系统中的故障。

2.原理

在使用 Spring Cloud Hystrix 时,通常会对服务进行监控,当服务出现故障时,熔断器会迅速断开与该服务的连接,从而防止该服务对整个系统造成影响。Hystrix 的原理可以简单分为以下几个步骤:

  1. 监控服务:Hystrix 会监控服务的调用情况,例如调用次数、成功率、响应时间等。
  2. 判断服务是否故障:Hystrix 会根据监控数据判断服务是否出现故障。例如,如果服务的响应时间超过了阈值,或者服务的成功率低于阈值,熔断器就会认为该服务出现了故障。
  3. 断开服务连接:当熔断器认为服务出现了故障时,它会迅速断开与该服务的连接,从而防止该服务对整个系统造成影响。
  4. 提供降级方案:当熔断器断开与服务的连接时,它会提供一个降级的方案,例如返回一个缓存的结果或者一个默认值。
  5. 定期重试:熔断器会定期重试与服务的连接,以检测服务是否已经恢复正常。

3.代码工程

实验目的

使用hystrix实现断路器功能

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>springcloud-demo</artifactId><groupId>com.et</groupId><version>1.0-SNAPSHOT</version></parent><groupId>com.et</groupId><artifactId>hystrix</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><spring-cloud.version>Hoxton.SR9</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>

controller

人为模拟超时异常,实现断路器功能,走默认的保护方法

package com.et.hystrix.controller;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;@RestController
public class HelloWorldController {@RequestMapping("/hello")@HystrixCommand(fallbackMethod = "fallback_hello", commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")})public Map<String, Object> showHelloWorld() throws InterruptedException {Thread.sleep(3000);Map<String, Object> map = new HashMap<>();map.put("msg", "HelloWorld");return map;}private Map<String, Object> fallback_hello() {Map<String, Object> map = new HashMap<>();map.put("msg", "Request fails. It takes long time to response");return map;}
}

DemoApplication.java

package com.et.hystrix;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;@SpringBootApplication
@EnableHystrix
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

application.yaml

server:port: 8088

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • GitHub - Harries/springcloud-demo: Spring Cloud tutorial about hystrix,eureka,config,admin,skywalking

4.测试

启动Spring Boot应用程序

验证断路器

访问

http://127.0.0.1:8088/hello

返回

{"msg":"Request fails. It takes long time to response"}

5.引用

  • 3. Circuit Breaker: Hystrix Clients
  • Spring Cloud Hystrix快速入门demo | Harries Blog™

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/31964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python xlwt库:写excel表格

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

基于java+springboot+vue实现的电商应用系统(文末源码+Lw)241

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本电商应用系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…

当flex-direction: column时,设置flex:1不生效解决办法

当需求是: 页面纵向排列,且最后一个元素撑满剩余高度 flex:1在横向排列时是可以的,但是纵向排列会失效,此时需要给最后一个子元素设置align-self: stretch;即可撑满剩余高度 <div class"father"><div class"child child1"></div><div…

Python抓取高考网图片

Python抓取高考网图片 一、项目介绍二、完整代码一、项目介绍 本次采集的目标是高考网(http://www.gaokao.com/gkpic/)的图片,实现图片自动下载。高考网主页如下图: 爬取的流程包括寻找数据接口,发送请求,解析图片链接,向图片链接发送请求获取数据,最后保存数据。 二…

C++设计模式——Composite组合模式

一&#xff0c;组合模式简介 真实世界中&#xff0c;像企业组织、文档、图形软件界面等案例&#xff0c;它们在结构上都是分层次的。将系统分层次的方式使得统一管理和添加不同子模块变得容易&#xff0c;在软件开发中&#xff0c;组合模式的设计思想和它们类似。 组合模式是…

DDP(Differential Dynamic Programming)算法举例

DDP(Differential Dynamic Programming)算法 基本原理 DDP(Differential Dynamic Programming)是一种用于求解非线性最优控制问题的递归算法。它基于动态规划的思想,通过线性化系统的动力学方程和二次近似代价函数,递归地优化控制策略。DDP的核心在于利用局部二次近似来…

(vue3)引入组件标红,...has no default export 组件没有默认导出

(vue3)引入组件标红&#xff0c;…has no default export 组件没有默认导出 一、项目背景&#xff1a; 创建的vitevue3ts项目页面有标红,但程序不报错 二、原因 由于之前安装了 Vetur 插件&#xff0c;Vetur 默认使用 eslint-plugin-vue&#xff0c;并且强制 export default …

linux升级openssh

在日常开发中&#xff0c;经常会需要升级服务器漏洞&#xff0c;记录一下linux升级openssh相关&#xff0c;服务器版本为centos7.8&#xff0c;升级有两种方案&#xff0c;一种是可以上互联网环境&#xff0c;一种是内网环境&#xff0c;我这边因为是内网环境&#xff0c;只能进…

MySQL中CASE WHEN用法总结

MySQL中CASE WHEN用法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在MySQL中&#xff0c;CASE WHEN语句是一种条件表达式&#xff0c;用于在查询中进行…

【AI应用探讨】—多模态应用场景

目录 1. 自动驾驶技术 多模态传感器融合 技术突破 2. 智能家居领域 多模态交互方式 应用实例 3. 智能客服领域 智能问答与情感分析 提升服务效率 4. 跨模态生成与理解 文字生成图像/视频 图像/视频生成文本 5. 未来发展趋势 多模态解析与生成 价值对齐与伦理考虑…

数据结构——优先级队列(堆)Priority Queue详解

1. 优先级队列 队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该场景下&#xff0c;使用队列不合适 在这种情况下&#xff0c;数据结构应…

代理ip服务器有哪些作用?

IP代理服务器具有以下几个作用&#xff1a; 1. 隐藏真实IP地址 代理服务器作为中间人&#xff0c;将用户请求转发给目标网站&#xff0c;从而隐藏用户的真实IP地址。这有助于保护用户的隐私和匿名性&#xff0c;防止被网站或其他人追踪和监控。 2. 绕过访问限制 某些网站可能…

2024.06.21 刷题日记

101. 对称二叉树 判断是否对称&#xff0c;检查 root->left->val root->right->val&#xff0c;接着进行递归检查对称位置&#xff1a; class Solution { public:// 传入对称位置的两个对称位置bool isMirror(TreeNode* left, TreeNode* right) {if (!left &…

设计模式2-面向对象设计原则

设计模式-面向对象的设计原则 依赖倒置原则开闭封闭原则单一职责原则Liskov替换原则接口隔离原则面向对象优先使用对象组合&#xff0c;而不是类继承。封装变化点针对接口编程&#xff0c;而不是针对实现编程 变化是复用的天地。面向对象设计最大的优势在于抵御变化。 重新认识…

odoo 翻译字段sql查询语句

字段写法&#xff1a; name->>en_US 任务&#xff1a; 查询name字段中&#xff0c;包含ring的数据 SQL模糊查询 SELECT * FROM product_public_category WHERE name->>en_US LIKE %ring%; SQL精准查询 SELECT * FROM product_public_category WHERE name->…

深入解析MVC架构(Model-View-Controller Architecture)

目录 前言1. MVC架构概述1.1 模型&#xff08;Model&#xff09;1.1.1 数据管理1.1.2 业务逻辑 1.2 视图&#xff08;View&#xff09;1.2.1 数据展示1.2.2 用户界面设计 1.3 控制器&#xff08;Controller&#xff09;1.3.1 用户输入处理1.3.2 更新模型和视图 2. MVC架构的优缺…

主干网络篇 | YOLOv5/v7 更换主干网络之 ResNet50/ResNet101 | 对比实验必备

主干网络篇 | YOLOv5/v7 更换主干网络之 ResNet50/ResNet101 | 对比实验必备 1. 简介 ResNet 是近年来最受欢迎的深度卷积神经网络架构之一&#xff0c;它以其优异的性能和鲁棒性而著称。ResNet50 和 ResNet101 是 ResNet 家族中最常用的两个模型&#xff0c;它们分别具有 50…

【深度学习】stable-diffusion-webui AUTOMATIC1111 的参数解释翻译

https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Command-Line-Arguments-and-Settings 参数命令值默认值描述-h, --helpNoneFalse显示帮助信息并退出–exit安装后终止–data-dirDATA_DIR./存储所有用户数据的基本路径–configCONFIGconfigs/stable-diffusion/…

易管理工厂设备日志采集工具

免费试用下载: Gitee下载 最新版本 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.

通过python脚本采集网络流量

#!/usr/bin/python # -*- coding:utf-8 -*- psutil模块是一个跨平台的获取进程和系统应用情况&#xff08;CPU&#xff0c;内存&#xff0c;磁盘&#xff0c;网络&#xff0c;传感器&#xff09;的库。 该模块用于系统监控、限制进程资源和运行进程的管理等方面。 网络信息 ps…