## 简介
* 由于SpringCloud从2020.*版本开始不再支持Hystrix,故JPower也做了调整,跟随spring版本后feign的熔断机制采用了阿里巴巴的sentinel。
* sentinel具体文档可查看[sentinel流控](./sentinel流控.md)
## 代码示例
1. 在`system-api`中新建熔断类,命名为`SystemClientFallback`
![](https://img.kancloud.cn/9f/61/9f616a360d0c2eda0896a6c4ec377433_824x730.png)
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,增加熔断配置
![](https://img.kancloud.cn/31/6e/316e55b38434d3ed700324dc5d8252e7_2160x1478.png)
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`修改如下
![](https://img.kancloud.cn/a7/ab/a7ab7d36f395976c6de67debc982e734_2428x1094.png)
- 序言
- 开发环境准备
- 环境要求
- 环境安装
- 基础环境安装
- 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