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

基本介绍

PluginStateService为插件提供启用状态查询能力,支持三种不同的查询语义。插件通过services.PluginState()获取该服务,根据业务场景选择合适的查询方法。

该服务是插件治理的核心基础设施,几乎所有需要感知自身或其他插件状态的场景都会使用。

设计思路

PluginStateService提供三种查询方法,分别服务于不同的时效性和一致性需求:

方法数据来源适用场景
IsEnabled进程本地快照菜单、路由、权限等高频判断
IsEnabledAuthoritative持久化治理状态全局中间件、写保护等不能接受滞后的控制
IsProviderEnabled平台插件启用快照能力提供方可用性判断

本地快照 vs 权威读取。 IsEnabled读取进程内的启用状态快照,延迟极低但可能滞后于管理端的最新操作。IsEnabledAuthoritative绕过本地快照,直接读取持久化存储,确保获取最新状态但延迟更高。

Provider启用状态。 IsProviderEnabled判断指定插件是否可以作为框架能力提供方。这个语义与IsEnabled独立:一个插件可能已启用但不能作为提供方(例如能力声明不完整),或者在某些上下文中作为提供方可用但业务入口不可见。

架构位置

PluginStateService在请求处理链路中被多个层消费:

主要能力

方法说明
IsEnabled查询插件是否已安装、启用且允许在当前请求范围暴露业务入口
IsEnabledAuthoritative绕过本地快照,从持久化治理状态读取启用状态,适用于全局控制
IsProviderEnabled查询插件是否作为框架能力提供方可用,独立于业务入口可见性

设计约束

  • 高频判断用IsEnabled 菜单过滤、路由注册、权限检查等场景应使用IsEnabled,它从进程本地快照读取,延迟极低。
  • 全局控制用IsEnabledAuthoritative 全局中间件、演示模式写保护等不能接受本地快照滞后的场景,应使用IsEnabledAuthoritative
  • IsProviderEnabled独立于业务入口。 一个插件的业务入口可能对当前租户不可见,但仍可作为能力提供方服务。这两个状态由不同的治理维度控制。
  • 查询范围受请求上下文影响。 IsEnabledIsEnabledAuthoritative的结果受当前请求的租户范围和运行时升级门禁影响,不同请求可能返回不同结果。

相关服务

  • PluginLifecycleService - 生命周期编排改变插件状态,PluginStateService查询插件状态
  • OrgService - 使用IsProviderEnabled判断组织能力提供方是否可用
  • TenantService - 使用IsProviderEnabled判断租户能力提供方是否可用