云服务器内容精选

  • 产品规格差异 Astro企业应用当前提供了基础版、专业版和企业版三种规格套餐,供您选择。关于规格的详细介绍,请参见表1。 基础版:满足个人及创业团队的基础需求,用户能够低门槛入门使用该产品。 专业版/企业版:提供了更多的应用及实体功能,可满足中大型企业的复杂管理需求。 表1 Astro企业应用套餐规格清单 版本类型 基础版 专业版 企业版 开发人数 1人 50人 50人 实体个数 5个 200个 200个 应用数 1个 20个 20个 高低代码混合开发 支持 支持 支持 企业级云原生框架 支持 支持 支持 用户管理 支持 支持 支持 用户权限 支持 支持 支持 高可用中间件SDK 支持 支持 支持 安全 支持 支持 支持 三方依赖管理 支持 支持 支持 Astro企业应用套餐包含的功能,请参见表2。 表2 Astro企业应用套餐功能说明 功能名称 功能描述 实体个数 组织内创建的对象实体总数。 应用数 创建的应用数量。 高低代码混合开发 基于建模的框架代码与可扩展的业务自定义代码混合开发。 高可用中间件SDK 内置高可用能力,如多数据源、容灾切换子能力和流控降级等。 安全 支持安全加解密、认证对接等。 三方依赖管理 通用三方依赖库管理。 三个套餐功能存在差异,请参考表3选择适合您的套餐。 表3 套餐功能特性差异说明 模块 功能 基础版 专业版 企业版 全局功能 导入元数据 支持 支持 支持 架构模板 不支持 不支持 支持 业务对象模板 不支持 不支持 支持 业务模块 不支持 不支持 支持 参考架构 不支持 支持 支持 导入DDL 不支持 不支持 支持 导入swagger 不支持 不支持 支持 框架转换 不支持 支持 支持 技术建模 服务单元化策略 默认SINGLE 默认SINGLE ROOTED SHARDING SINGLE 客户端类型 不支持 OPEN_FEIGN OPEN_FEIGN 客户端依赖类型 不支持 SDK SDK METHOD 支持请求入口出口插件 不支持 支持 支持 生成策略 关闭API中根对象前缀 不支持 支持 支持 多租模型,对象支持多租 不支持 Tenant Tenant 租户验证方式 不支持 Header Token Header Token orm框架 不支持 支持 支持 archunit 不支持 支持 支持 业务建模 默认分表数量 不支持 支持 支持 分库逻辑 默认SINGLE BROADCASTING ROOTED SHARDING SINGLE BROADCASTING ROOTED SHARDING SINGLE 分库策略 不支持 MOD HASH_MOD RANGE CUSTOM INTERVAL MOD HASH_MOD RANGE CUSTOM INTERVAL 分表策略 不支持 DB_SHARDING MOD HASH_MOD INTERVAL DB_SHARDING MOD HASH_MOD INTERVAL 固定字段 支持 支持 支持 枚举字段 支持 支持 支持 自定义DTO 支持 支持 支持 脱敏规则(全局定义) 支持 支持 支持 BO类型 FINAL VALUE_OBJECT FINAL VALUE_OBJECT ABSTRACT FINAL VALUE_OBJECT ABSTRACT 软删除策略 不支持 不支持 支持 对象版本化 不支持 不支持 支持 字段校验 不支持 不支持 支持 维度告警 不支持 支持 支持 应用管理 应用 不支持 不支持 支持 子域 不支持 不支持 支持 应用服务 不支持 不支持 支持 服务SLA 不支持 不支持 支持 资产库 自定义字段类型 不支持 支持 支持 客户端流控策略 不支持 支持 支持 连接器 不支持 不支持 支持 前端开发 前端应用 支持 支持 支持 模板管理 不支持 支持 支持 物料中心 不支持 不支持 支持
  • 升级实例版本 Astro企业应用当前提供了基础版、专业版和企业版三种规格套餐。不同套餐支持的特性差异,请参见产品规格差异。如果您购买的实例无法满足您当前管理需求,则可升级实例版本。 当前仅支持从低规格套餐升级到高规格套餐,不支持降级。规格变更后,不支持回退。 在已购买的实例中,单击“操作”,选择“升级版本”。 图1 选择升级版本 在升级规格页面,选择目标规格,单击“去支付”。 若您购买的是基础版实例,可直接升级到专业版或企业版。若您购买的是专业版实例,仅支持升级到企业版。 图2 选择规格 进入支付页面,选择支付方式,确认付款,支付订单后即可完成规格升级。 父主题: 新手指引
  • AuthObject对象 AuthObject对象即鉴权客体,被鉴权对象。 表2 AuthObject对象参数说明 参数名称 数据类型 描述 projectId String 被鉴权资源所在的项目id,对于不属于项目的资源,允许为空。 对于非多项目应用(MetaService中tenantModel为null或者TENANT),允许为空。 如果为多项目应用(MetaService中tenantModel值为TENANT_PROJECT),则传入projectId。 resource String 被鉴权资源,不允许为空。 根据MetaBOAuthorizeType不同的值,传入对应值。 ROOT:传入BO对象所在的Root BO的id。 TYPE_LEVEL:传入BO name。 INSTANCE_LEVEL:传入BO对象id。
  • AuthSubject对象 AuthSubject对象即鉴权主体。 表1 AuthSubject对象参数说明 参数名称 数据类型 描述 tenantId String 根据用户所在的租户传值: 对于非多租应用(MetaService中tenantModel为空),允许为空。 如果为多租应用(MetaService中tenantModel值为TENANT或者TENANT_PROJECT),则传入tenantId。 uid String 鉴权主体的user id,不允许为空。
  • 认证配置 在配置文件中加入oauth2认证相关配置和devspore相关配置,如下: devspore: auth: exclude-paths: GET:/test # 不需要认证的路径,多个规则用;分隔 auth-patterns: /v1/** # 需要认证的路径,多个规则用;分隔 in-header: true # token是否在header中,默认true token-name: X-Auth-Token # token在header中的参数名,inHeader设置为true时生效,默认X-Auth-Token
  • 实现UserStore接口 import com.huawei.devspore.plugin.spi.authentication.UserInfo; import com.huawei.devspore.plugin.spi.authentication.UserStore; import org.springframework.stereotype.Component; @Component public class CustomUserStore implements UserStore { @Override public void setUserInfo(UserInfo userInfo) { // 自定义存储用户信息 ...... } @Override public UserInfo getUserInfo() { UserInfo userInfo = new UserInfo(); // 自定义用户信息获取 ...... return userInfo; } }
  • 实现TokenParser接口 import com.huawei.devspore.plugin.spi.authentication.UserInfo; import com.huaweicloud.devspore.auth.commons.spi.TokenParser; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; @Component public class CustomTokenParser implements TokenParser { /** * 若token定义在header中,可使用该接口,token获取根据配置由devspore-auth获取 * * @param token * @param response * @return UserInfo */ @Override public UserInfo parserToken(String token, HttpServletResponse response) { // 自定义token解析 ...... // 判断token是否过期 ...... UserInfo userInfo = new UserInfo(); // 根据解析后的token信息填充UserInfo对象 ...... return userInfo; } /** * 若token未定义在header中,使用该接口 * * @param request * @param response * @return UserInfo */ @Override public UserInfo parserToken(HttpServletRequest request, HttpServletResponse response) { // 从httpServletRequest获取token ...... // 自定义token解析 ...... // 判断token是否过期 ...... UserInfo userInfo = new UserInfo(); // 根据解析后的token信息填充UserInfo对象 ...... return userInfo; } }
  • 配置说明 表1 配置说明 参数名 是否必须 功能 devspore.auth.exclude-paths false 不需要认证的路径,多个规则用分号(;)分隔,优先级大于devspore.auth.auth-patterns。 devspore.auth.auth-patterns false 需要认证的路径,多个规则用分号(;)分隔。 devspore.auth.in-header false token是否在header中,默认true。 devspore.auth.token-name false token在header中的参数名,inHeader设置为true时生效,默认“X-Auth-Token”。
  • 实现示例 entry插件 继承抽象类Processor,实现doProcess接口,可定义多个插件。 插件均需注册为bean。 import com.huawei.devspore.horizon.DataEvent; import com.huawei.devspore.horizon.exception.PluginException; import com.huawei.devspore.horizon.processor.Processor; import org.springframework.stereotype.Component; /** * custom request plugin */ @Component public class CustomRequestPlugin extends Processor { @Override public boolean doProcess(DataEvent dataEvent) throws PluginException { // do your code ........ return true; } } 多个插件以","分隔,多个插件按配置顺序执行。 devspore: horizon: processors: defaultRequestPlugin,customRequestPlugin; exit插件 实现Observer接口中observer接口,可定义多个插件。 插件均需注册为bean。 import com.huawei.devspore.horizon.DataEvent; import com.huawei.devspore.horizon.exception.PluginException; import com.huawei.devspore.horizon.subscribe.Observer; import org.springframework.stereotype.Component; /** * custom response plugin */ @Component public class CustomResponsePlugin implements Observer { @Override public void observe(DataEvent dataEvent) throws PluginException { // do your code ...... } } 配置文件中多个插件以","分隔,多个插件按配置顺序执行。 devspore: horizon: observers: defaultResponsePlugin,customResponsePlugin
  • 整体架构 devspore-horizon是DevSpore开发框架提供的一种插件机制,您可以在请求被处理前(Entry)和应答发送前(Exit)调用DevSpore预置的,也可以使用自己开发的插件,可用于实现统一的操作前认证、鉴权,操作后消息发送、缓存更新、审计等功能。 devspore-horizon架构图如下: 图1 架构图 Entry类插件采用的是责任链模式(chain of resposibility),所有的插件按照被注册的顺序依次调用,其中有一个插件抛出异常则整个请求返回失败。 Exit类插件采用的是观察者模式(Observer),所有的插件作为观察者注册,DevSpore运行时库里的Publisher模块同时调用所有的观察者插件(插件可能被并发执行且执行的顺序随机),插件执行的结果不能影响请求返回。
  • 业务场景及设计流程说明 在AstroPro中,用户通过业务建模,可生成高可用、高可靠、以及安全稳定的企业级IT应用框架。本入门通过创建一个简单的订单系统,帮助您快速上手AstroPro。 本入门为创建一个简单的订单系统,订单系统中包括用户(User)、订单(Order)和订单详情(OrderDetail)三个业务对象,且三个对象之间存在聚合关系,即用户存在时,订单才会存在,订单存在时,订单详情才会存在。同时一个用户可以关联多个订单,订单通过单号进行标识,一个订单又可以关联多个商品,例如手机、耳机等,商品可以记录数量。在AstroPro中,构建上述一个订单系统的流程,如图图1所示。 图1 开发订单系统流程图
  • 购买扩容包 扩容包仅适用于在购买专业版或企业版的基础上使用,不可单独购买和退订。扩容包的使用截止时间与主资源的截止时间保持一致。 参考购买实例中操作,购买AstroPro企业版实例。 在已购买的实例中,单击“操作”,选择“扩容”。 图4 选择扩容 在购买扩容包页面,设置购买数量,单击“立即购买”。 一个资源扩容包,包含用户数50个、应用数20个、实体个数200个,请按需设置购买数量。 图5 购买扩容包 选择支付方式,单击“确认付款”,完成订单支付。
  • 购买实例 进入购买Astro企业应用实例页面。 “实例规格”选择“企业版”,其他参数按需进行设置,单击“立即购买”。 图1 选择购买规格 确认订单无误后,单击“去支付”。 以购买企业版一年为例,若为基础版,此处配置费用为“0”。 图2 确认订单 选择支付方式,单击“确认付款”,完成支付。 订单支付成功后,单击“返回Astro企业应用控制台”。 在Astro企业应用控制台中,可以查看到Astro企业应用的实例状态。当“实例状态”变为“运行中”时,说明实例已安装完成,可以正常使用Astro企业应用。 图3 查看实例状态
  • 5、x-class-annotations 作用: 添加指定的注解。 该标签用于在api接口或者dto类上添加指定的注解。 标签值类型: List 使用位置: x-class-annotations(定义在swagger的最外层时,会在所有的api接口上都添加指定的注解) components.schemas.model.x-class-annotations(定义dto对象上时,只在该对象上添加指定的注解) 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-imports: - "org.springframework.stereotype.Controller;" # 使用的时候结尾一定要带上 ; - "org.springframework.transaction.annotation.Transactional;" x-class-annotations: #此处添加的注解,在所有生成的api上都会添加 - "@Controller" # 此处会将 @Controller识别为一个字符串添加到api接口类上,并不会导入相应的包,需要使用 x-imports标签手动导入相应的包 - "@Transactional" # 此处会将 @Transactional识别为一个字符串添加到api接口类上,并不会导入相应的包,需要使用 x-imports标签手动导入相应的包 使用效果: 使用前: package com.huaweicloud.icsl.api; import ------ /** * CARDApi interface */ public interface CARDApi { ----------- } 使用后: package com.huaweicloud.icsl.api; import org.springframework.stereotype.Controller; // 通过x-imports 引入的导包 import org.springframework.transaction.annotation.Transactional; // 通过x-imports 引入的导包 /** * CARDApi interface */ @Controller // 通过x-class-annotations 引入的注解 @Transactional // 通过x-class-annotations 引入的注解 public interface CARDApi { ----------- }
  • 9、x-type 作用: 给dto的字段设置指定的类型。 标签值类型: String 使用位置: components.schemas.model.prorperties.field.x-type(设置在dto的指定字段上时,改变该字段的类型为指定类型) 使用示例: definitions: Contain: type: "object" x-generic: T x-extends: Parent properties: name: type: "string" description: "" example: data: type: "string" x-type: T # 通过x-type指定data的类型为T, 此处是将T当为一个字符串设置上,如果设置为一个对象时,需要使用x-imports手动导入相应的包 xml: name: "Contain" namespace: "com.huaweicloud.icsl.app.dto" --------------- 使用效果: 使用前: public class Contain implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("name") private String name = null; @JsonProperty("data") private String data = null; } 使用后: public class Contain implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("name") private String name = null; @JsonProperty("data") private T data = null; }