## Hystrix簡介

* hystrix對應的中文名字是“豪豬”,豪豬周身長滿了刺,能保護自己不受天敵的傷害,代表了一種防御機制。
* 這與hystrix本身的功能不謀而合,因此Netflix團隊將該框架命名為Hystrix,并使用了對應的卡通形象做作為logo。
* 在一個分布式系統里,許多依賴不可避免的會調用失敗,比如超時、異常等,如何能夠保證在一個依賴出問題的情況下,不會導致整體服務失敗,這個就是Hystrix需要做的事情。
* Hystrix提供了熔斷、隔離、Fallback、cache、監控等功能,能夠在一個、或多個依賴同時出現問題時保證系統依然可用。
## 代碼示例
1. 在`blade-demo-api`中新建Hystrix類,命名為`BlogClientFallback`

2. 同樣實現`BlogClient`接口,只是此時只需返回對應數據即可,不需要再定義為`Controller`
3. 代碼如下
~~~
package org.springblade.demo.feign;
import org.springblade.core.tool.api.R;
import org.springblade.demo.entity.Blog;
import java.time.LocalDateTime;
public class BlogClientFallback implements BlogClient {
@Override
public R<Blog> detail(Integer id) {
Blog blog = new Blog();
blog.setBlogTitle("Hystrix");
blog.setBlogContent("FallBack Success");
blog.setBlogDate(LocalDateTime.now());
blog.setIsDeleted(0);
return R.data(blog);
}
}
~~~
4. 修改BlogClient,增加Hystrix配置
~~~
@FeignClient(
//定義Feign指向的service-id
value = CommonConstant.APPLICATION_DEMO_NAME,
//定義hystrix配置類
fallback = BlogClientFallback.class
)
public interface BlogClient {
/**
* 接口前綴
*/
String API_PREFIX = "/api/blog";
/**
* 獲取詳情
*
* @param id 主鍵
* @return
*/
@GetMapping(API_PREFIX + "/detail")
R<Blog> detail(@RequestParam("id") Integer id);
}
~~~
5. 增加`FallBack`自動配置(**不新建配置,直接在BlogClientFallback類上加@Component注解也可以**)

6. 這時我們去`blade-demo`的`BlogClientImpl`模擬異常
~~~
@RestController
@AllArgsConstructor
public class BlogClientImpl implements BlogClient {
private BlogService service;
@Override
@GetMapping(API_PREFIX + "/detail")
public R<Blog> detail(Integer id) {
int cnt = 100 / 0;
return R.data(service.getById(id));
}
}
~~~
7. 使用Postman調用API查看,發現Hystrix配置生效

## 結束語
* 開發初探的教程就到這兒了,想必有一些開發經驗的小伙伴會很容易上手,掌握了這些基礎核心,日后勤看文檔,多深入學習,相信大家都能很輕松的完成絕大部分開發任務了。
* 下面一章,讓我們來學習 `開發進階`,會逐步講一些架構級別的知識點或一些高級用法。
- 第零章 序
- 序言
- 系統架構
- 視頻公開課
- 開源版介紹
- 商業版介紹
- 功能對比
- 答疑流程
- 第一章 快速開始
- 升級必看
- 環境要求
- 環境準備
- 基礎環境安裝
- Docker安裝基礎服務
- Nacos安裝
- Sentinel安裝
- 插件安裝
- 建數據庫
- 工程導入
- 導入Cloud版本
- 導入Nacos配置
- 導入Boot版本
- 工程運行
- 運行Cloud版本
- 運行Boot版本
- 工程測試
- 測試Cloud版本
- 測試Boot版本
- 第二章 技術基礎
- Java
- Lambda
- Lambda 受檢異常處理
- Stream 簡介
- Stream API 一覽
- Stream API (上)
- Stream API (下)
- Optional 干掉空指針
- 函數式接口
- 新的日期 API
- Lombok
- SpringMVC
- Swagger
- Mybatis
- Mybatis-Plus
- 開發規范
- 第三章 開發初探
- 新建微服務工程
- 第一個API
- API鑒權
- API響應結果
- Redis緩存
- 第一個CRUD
- 建表
- 建Entity
- 建Service和Mapper
- 新增 API
- 修改 API
- 刪除 API
- 查詢 API
- 單條數據
- 多條數據
- 分頁
- 微服務遠程調用
- 聲明式服務調用 Feign
- 熔斷機制 Hystrix
- 第四章 開發進階
- 聚合文檔
- 鑒權配置
- 跨域處理
- Xss防注入
- 自定義啟動器
- Secure安全框架
- Token認證簡介
- Token認證配置
- PreAuth注解配置
- Token認證實戰
- Token認證加密
- 日志系統
- 原理解析
- 功能調用
- Seata分布式事務
- 簡介
- 編譯包啟動
- 配置nacos對接
- docker啟動
- 對接微服務
- 代碼生成配置
- 前言
- 數據庫建表
- 代碼生成
- 前端配置
- 優化效果
- 第五章 功能特性
- SaaS多租戶
- 概念
- 數據隔離配置
- 線程環境自定義租戶ID
- 多終端令牌認證
- 概念
- 系統升級
- 使用
- 第三方系統登錄
- 概念說明
- 對接說明
- 對接準備
- 配置說明
- 操作流程
- 后記
- UReport2報表
- 報表簡介
- 對接配置
- 報表后記
- 接口報文加密
- 簡介
- 運行邏輯
- 對接準備
- 功能配置
- 接口測試
- 改造查詢
- 改造提交
- 改造刪除
- 動態數據權限
- 數據權限簡介
- 數據權限開發
- 純注解配置
- Web全自動配置
- 注解半自動配置
- 數據權限注意點
- 動態接口權限
- 樂觀鎖配置
- 統一服務登陸配置
- Skywalking追蹤監控
- Minio分布式對象存儲
- Boot版本對接至Cloud
- 第六章 生產部署
- windows部署
- linux部署
- jar部署
- docker部署
- java環境安裝
- mysql安裝
- docker安裝
- docker-compose安裝
- harbor安裝
- 部署步驟
- 寶塔部署
- 準備工作
- 安裝工作
- 部署準備
- 部署后端
- 部署前端
- 部署域名
- 結束工作
- k8s平臺部署
- 第七章 版本控制
- Git遠程分支合并
- Git地址更換
- 第八章 學習資料
- 第九章 FAQ
- 第十章 聯系我們