应用管理与运维平台 ServiceStage
应用管理与运维平台 ServiceStage
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 使用前必读
- 权限管理
- 环境管理
- 应用管理
- 组件管理
- 配置管理
- 发布管理(公测)
- 技术栈管理
- 部署源管理
- 持续交付
- 微服务引擎
- 云审计服务支持的关键操作
- 查看监控指标及告警
- 开发指南
- 最佳实践
- API参考
- SDK参考
-
常见问题
- 应用开发问题咨询指引
- 环境管理
-
应用管理
- 如何查看应用组件部署失败的原因?
- 实例长期处于创建中怎么办?
- 如何解决Docker运行node应用程序时的依赖问题?
- 如何定制Tomcat Context path?
- 如何固定应用组件IP?
- 如何处理虚拟机类型环境下创建和部署组件时遇到ECS错误?
- 如何处理虚拟机类型环境下创建和部署组件时端口访问不通的错误?
- 虚拟机类型环境下部署的应用组件支持在什么目录写文件?
- 如何处理虚拟机类型环境下部署的组件删除失败报host status is not active错误的问题?
- 如何体验ServiceStage的源码部署功能?
- 如何处理使用ServiceStage灰度发布升级组件失败?
- 如何通过挂载配置项方式修改容器部署的组件配置文件?
- 如何处理应用组件接入微服务引擎后在微服务治理下看到的应用名称和ServiceStage应用管理下的不同?
- 持续交付
- 软件中心
- 基础设施
- 应用运维
- 应用开发问题
-
更多文档
- API参考(阿布扎比区域)
-
用户指南(阿布扎比区域)
- 产品介绍
- 快速入门
- 用户指南
-
常见问题
- 如何获取AK/SK?
- 如何处理修改项目名称导致的错误?
- 微服务和普通应用有什么不同?
- 如何查看应用组件部署失败的原因?
- 如何处理部署或升级虚机组件失败?
- Node.js 8软件包打包有哪些约束?
- 如何处理安装Agent失败?
- 如何处理Agent离线?
- 虚机部署的应用组件支持在什么目录写文件?
- 如何处理虚机部署的组件删除失败报host status is not active错误的问题?
- Docker应用程序依赖的问题
- 如何解决Docker客户端push镜像失败的问题?
- 如何获取项目名称?
- 如何处理开启了安全认证的微服务引擎专享版开启IPv6后服务注册失败?
- 如何处理操作微服务引擎专享版时遇到非微服务引擎本身错误?
- 如何处理部署组件时失败,报错日志详情显示connection was closed?
- 如何处理部署虚机组件时遇到ECS错误?
- 如何处理虚机部署端口访问不通的错误?
- 如何处理微服务应用名称与组件所属应用名称不同的问题?
- 如何解释微服务名称与组件名称不同的原因?
- 微服务引擎专享版数据恢复失败
- 用户指南(吉隆坡区域)
- API参考(吉隆坡区域)
- 视频帮助
- 通用参考
本文导读
展开导读
链接复制成功!
自定义治理
服务治理的默认实现并不一定能够解决业务的所有问题。自定义治理功能可以方便地在不同的场景下使用基于流量的治理能力,比如在网关场景下进行流控,在Java Chassis场景下支持URL匹配等。SDK基于Spring,使用Spring的框架都能够灵活的使用这些API,方法类似。
下面以流控为例,说明如何使用API。使用API开发的自定义代码,也可以通过微服务引擎的管理控制台下发业务和治理规则。
代码的基本过程包括声明RateLimitingHandler的引用,创建GovernanceRequest,拦截(包装)业务逻辑,处理治理异常。
@Autowired private RateLimitingHandler rateLimitingHandler; GovernanceRequest governanceRequest = convert(request); CheckedFunction0<Object> next = pjp::proceed; DecorateCheckedSupplier<Object> dcs = Decorators.ofCheckedSupplier(next); try { SpringCloudInvocationContext.setInvocationContext(); RateLimiter rateLimiter = rateLimitingHandler.getActuator(request); if (rateLimiter != null) { dcs.withRateLimiter(rateLimiter); } return dcs.get(); } catch (Throwable th) { if (th instanceof RequestNotPermitted) { response.setStatus(429); response.getWriter().print("rate limited."); LOGGER.warn("the request is rate limit by policy : {}", th.getMessage()); } else { if (serverRecoverPolicy != null) { return serverRecoverPolicy.apply(th); } throw th; } } finally { SpringCloudInvocationContext.removeInvocationContext(); }
上面简单的介绍了自定义开发。对于更加深入的使用方式,也可以直接参考Java Chassis、Spring Cloud项目中的默认实现代码。
父主题: 使用服务治理