## 簡介
* 由于SpringCloud從2020.*版本開始不再支持Hystrix,故JPower也做了調整,跟隨spring版本后feign的熔斷機制采用了阿里巴巴的sentinel。
* sentinel具體文檔可查看[sentinel流控](./sentinel流控.md)
## 代碼示例
1. 在`system-api`中新建熔斷類,命名為`SystemClientFallback`

2. 實現`SystemClient`接口,此時只需返回對應數據即可,不需要再定義為 Controller
3. 代碼如下,**以下代碼已在工程中實現**
~~~
@Component
public class SystemClientFallback implements SystemClient {
@Override
public ResponseData<List<String>> queryChildOrgById(String id) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<TbCoreOrg> queryOrgById(String orgId) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<TbCoreClient> getClientByClientCode(String clientCode) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<List<Object>> getUrlsByRoleIds(List<String> roleIds) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<TbCoreTenant> getTenantByCode(String tenantCode) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<List<TbCoreFunction>> getMenuListByRole(List<String> roleIds) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<List<TbCoreDataScope>> getAllRoleDataScope() {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<List<TbCoreDataScope>> getDataScopeByRole(List<String> roleIds) {
return ReturnJsonUtil.fail("查詢失敗");
}
}
~~~
4. 修改SystemClient,增加熔斷配置

5. 這是我們再使用feign進行服務調用時,如果服務發生異常,就會返回查詢失敗的提示
6. 有時我們服務調用發生錯誤時我們想知道究竟發生什么錯誤,這時我們需要打印這些錯誤
7. 我們這里以`user-api`為例,看下`UserClientFallback`代碼,可以看到繼承`FallbackFactory`并實現`UserClient`泛型
~~~
@Component
@Slf4j
public class UserClientFallback implements FallbackFactory<UserClient> {
@Override
public UserClient create(Throwable cause) {
return new UserClient() {
@Override
public ResponseData<TbCoreUser> queryUserByLoginId(String loginId, String tenantCode) {
log.error("調用queryUserByLoginIdPwd失敗,參數:loginId={},e={}",loginId,cause);
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<List<String>> getRoleIds(String userId) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData updateUserLoginInfo(TbCoreUser user) {
log.error("調用updateUserLoginInfo失敗,參數:{},e={}", JSON.toJSONString(user),cause);
return ReturnJsonUtil.fail("更新失敗");
}
@Override
public ResponseData<TbCoreUser> queryUserByCode(String otherCode, String tenantCode) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<TbCoreUser> get(String id) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData<TbCoreUser> queryUserByPhone(String phone, String tenantCode) {
return ReturnJsonUtil.fail("查詢失敗");
}
@Override
public ResponseData saveAdmin(TbCoreUser user,String roleId) {
log.error("調用saveAdmin失敗,參數:user={},roleId={} ,e={}",user,roleId,cause);
return ReturnJsonUtil.printJson(ConstantsReturn.RECODE_API, cause.getMessage(),false);
}
};
}
}
~~~
8. `UserClient`修改如下

- 序言
- 開發環境準備
- 環境要求
- 環境安裝
- 基礎環境安裝
- Nacos安裝
- Sentinel安裝
- 插件安裝
- 導入工程
- 運行工程
- 工程測試
- JPower特性
- 系統啟動器
- 多終端令牌認證
- 系統鑒權
- 鑒權API
- 鑒權配置
- API權限配置
- 接口放行配置
- 數據權限
- redis緩存
- 動態網關
- 聚合文檔
- SaaS多租戶
- 概念
- 使用
- Xss防注入
- 日志記錄
- 操作日志&錯誤日志
- SQL打印
- feign請求日志&配置
- gateway日志
- 服務日志打印
- 導入導出
- 字典查詢
- 系統文件上傳下載
- 接口監控
- 代碼生成器
- 配置文件共享
- Mybatis過濾器
- 配置說明
- 高級實戰
- nacos動態配置
- Seata分布式事務
- 簡介
- docker啟動
- 微服務配置
- 微服務遠程調用
- 聲明式服務調用 Feign
- 熔斷機制 Sentinel
- sentinel流控
- 簡介
- 微服務配置
- 配置nacos對接
- APM監控&鏈路追蹤
- 簡介
- 安裝
- 微服務接入
- SpringBootAdmin監控
- ELK分布式日志追蹤系統
- ELK簡介
- ELK一鍵部署
- 微服務日志對接ELK
- JPower-Chat
- 配置說明
- 生產部署
- docker部署
- docker安裝
- docker-compose安裝
- harbor安裝
- 部署步驟
- 版本升級
- 1.0.1升級到2.0.0
- 2.0.0升級到2.0.2
- 2.0.2升級2.1.0
- 2.1.0升級到2.1.1
- 2.1.1升級到2.1.2
- 2.1.2升級到2.1.4