跳到主要内容
版本:0.4.x(Latest)

基本介绍

Distribution(分发治理)是LinaPro插件系统中描述插件如何被宿主平台治理的关键枚举字段。它决定了插件的生命周期管理策略、管理页面可见性以及启动时的行为。

通过在plugin.yaml中声明distribution字段,开发者可以明确指定插件是作为普通市场插件还是项目内建插件进行治理。两种分发模式在安装、启用、升级和管理操作上存在显著差异。

分发模式类型

LinaPro支持两种分发治理模式:

分发类型语义生命周期特征适用场景
marketplace普通插件,可被平台管理员显式管理需要显式安装、启用、升级,或由plugin.autoEnable托管启用第三方插件、可选功能模块
builtin项目内建源码插件,是项目组成部分启动时自动安装、启用、安全升级;普通插件管理入口不可操作核心业务插件、项目必需功能

对于基于LinaPro开发自身业务系统的企业或团队,通常将业务插件声明为builtin分发模式。这是因为业务插件是系统的核心组成部分,需要随主框架一起编译、部署和升级,确保在生产环境中始终可用且版本一致。

提示

distribution字段的默认值为marketplace。如果plugin.yaml中未声明该字段,插件将按照市场插件的模式进行治理。

配置示例

plugin.yaml中声明分发模式:

# 市场插件(默认)
id: linapro-ai-core
name: AI Hub
version: 0.1.0
type: source
distribution: marketplace
scope_nature: tenant_aware
# 内建插件
id: linapro-tenant-core
name: 多租户核心
version: 0.1.0
type: source
distribution: builtin
scope_nature: tenant_aware

双因子约束

distribution: builtin的声明需要满足双因子约束:

  1. 类型约束type必须为source(源码插件)
  2. 注册约束:必须通过pluginhost.RegisterSourcePlugin注册到源码插件注册表

动态插件(type: dynamic)不支持builtin分发模式。如果在动态插件的plugin.yaml中声明distribution: builtin,Manifest校验阶段将返回错误。

生命周期管理

两种分发模式在生命周期管理上存在显著差异:

市场插件生命周期

市场插件需要管理员显式操作或通过配置自动启用:

操作触发方式说明
安装管理员手动安装从插件市场选择并安装
启用管理员手动启用或plugin.autoEnable安装后需要显式启用
升级管理员手动升级需要确认新版本
禁用管理员手动禁用可随时禁用
卸载管理员手动卸载可随时卸载

内建插件生命周期

内建插件在启动时自动收敛,管理员无法通过管理界面进行操作:

操作触发方式说明
安装启动时自动安装未安装则自动安装,不加载演示数据
启用启动时自动启用未启用则自动启用
升级启动时自动安全升级检测到新版本自动升级
禁用不允许管理界面隐藏禁用按钮
卸载不允许管理界面隐藏卸载按钮

启动收敛流程

内建插件在主框架启动时执行自动收敛,确保所有内建插件处于就绪状态:

启动顺序设计:

  1. 源码清单同步source manifest sync):扫描并同步所有源码插件的清单信息
  2. 内建插件收敛bootstrap builtin plugins):按依赖拓扑排序,依次安装、升级、启用所有内建插件
  3. 自动启用插件收敛bootstrap plugin.autoEnable):根据配置自动启用声明为自动启用的市场插件
  4. 租户插件协调reconcile auto-enabled tenant plugins):协调租户级别的插件启用状态
  5. 注册路由和运行时入口register routes and runtime entries):将所有已启用插件的路由和运行时入口注册到宿主框架
提示

内建插件的启动收敛采用fail-fast策略:如果任何一个内建插件的安装、升级或启用失败,默认中止启动流程。

与 autoEnable 的关系

plugin.autoEnable配置项用于声明需要自动启用的插件列表,但它与distribution: builtin存在语义差异:

特性plugin.autoEnabledistribution: builtin
作用范围仅影响启用阶段影响安装、启用、升级全生命周期
管理操作允许管理员手动操作管理员无法操作
升级行为不自动升级启动时自动安全升级
启动失败不中止启动fail-fast中止启动

如果plugin.autoEnable中包含已声明为builtin的插件,系统会在启动时发出警告,提示配置重叠。

最佳实践

  1. 核心功能使用builtin:将项目必需的核心业务插件声明为builtin,确保它们始终可用
  2. 可选功能使用marketplace:将可选的功能模块声明为marketplace,允许管理员灵活管理
  3. 企业业务插件优先选择builtin:基于 LinaPro 开发业务系统时,将自研业务插件声明为builtin,与主框架统一编译部署,避免生产环境遗漏或版本不一致
  4. 遵循双因子约束:声明builtin时确保同时满足类型和注册约束
  5. 合理规划依赖顺序:内建插件按依赖拓扑排序启动,确保依赖关系正确
  6. 避免配置重叠:不要将builtin插件同时添加到plugin.autoEnable

常见误区

误区正确做法
在动态插件中声明distribution: builtinbuiltin仅支持源码插件(type: source
声明builtin但未注册到源码插件注册表确保通过pluginhost.RegisterSourcePlugin完成注册
builtin插件添加到plugin.autoEnablebuiltin已包含自动启用逻辑,无需重复配置
期望通过管理界面操作内建插件内建插件的管理操作在服务端被拒绝,前端完全隐藏
认为builtin插件可以跳过SQL迁移内建插件仍走完整的SQL迁移流程