共享服务构成基础
此软件包将同一可导入的 NestJS 服务模块组成一个独立应用程序,或者由一个公共的 HTTP 听取器进行一个进程. 它使用峡谷 @appneurox/service-runtime 用于拖曳、认证、租户上下文、相关性、出错和关闭的软件包。 它不创建第二个 Async LocalStorage,认证装饰或运行时间复制. 在远程节点24跑道上先构建运行时间;工作空间根拥有依赖安装和锁文件.
ServiceDefinition 包含安全的小写服务 slug 与公众 label。 。 。 . composeServiceModule(ModuleType, definition, ApplicationClass, options) 接受独特的模块类和扩展的应用程序类 BaseServiceApplication;其动态模块输出应用程序类和稳定 serviceApplicationToken(slug) 符号。 应用类可以使用正常的Nest DI. 域模块不拖曳应用程序,注册全局守护,安装流程处理器,读取流程配置或打开套接字. 可选的供应商/进口选项支持明确的基础设施注入;它们不提供或核实基础设施.
@Injectable()
class VendorApplication extends BaseServiceApplication {
constructor() { super({ slug: 'vendor-service', label: 'Vendor' }); }
}
@Module({})
class VendorModule {}
const definition = { slug: 'vendor-service', label: 'Vendor' };
const service = {
definition,
module: composeServiceModule(VendorModule, definition, VendorApplication),
applicationToken: serviceApplicationToken(definition.slug),
};
独立主机导入 service.module 穿过峡谷的跑道. createMonolithApplication({ services, config, authVerifier, logger }) 初始化而不听; bootstrapMonolith 打开一个主机听众 并拥有优雅的关闭。 两人都接受犬科运行时间的选择. 每个服务控制器都安装在弹簧下,例如 /vendor-service/v1/module 财务报告和审定财务报表 /vendor-service/v1/execute一个东道主运行时间服务于健康/发现和公众 /modules 列出元数据。 复制弹片,共享模块类,不安全的定义和不匹配的应用符号在拖放前会失败.
BaseServiceApplication.metadata() 报告 BOILERPLATE, (中文(简体) ), businessReady: false 财务报告和审定财务报表 businessImplementation: not_implemented。 。 execute 边界完全接受 { operation, payload }。操作名称使用带有可选点、下划线或连字符分隔符的小写字母/数字,最多63个字符。 有效载荷必须是普通的JSON对象;访问器,符号,原型键,循环,稀有数组和非JSON值被拒绝. 输入限为64KiB,16个筑巢级和4096个JSON节点. 共享 ExecuteOperationDto 增加了HTTP验证,而应用程序再次验证直接调用.
authorizeOperation(scope, requireTenant = true) 仅读取 Cononic 运行时间已核实的请求上下文。 它重新检查主要住户、选定的租户成员和确切范围;单凭要求的主管从不授权。 它不验证无记名证或薄荷本金:主机真实的 AuthVerifier 必须首先确定这一背景。 直接信任的呼叫者必须通过同一经核实的权威边界进入. execute 需求 ${slug}:${operation} ,然后返回501,因为不存在业务执行。 HTTP适配器可能还需要固定的入侵范围,例如: ${slug}:invoke。 。 。 .
应用程序服务在单立模式下直接通过DI调用导出应用程序提供者. 独立的依赖性适配器可以执行相同的显式端口. Redis 集合、坚持、提供者客户和背景工作仍然是选择所有者执行。 这一基础包括没有Redis驱动程序、WS/gRPC监听器或准备状态索赔;这些运输需要明确的适配器、认证和生命周期测试。 它既不转换现有的82个执行或原生的54个模块,也不削减其API、数据或部署.