WU / 文档通用微前端
中文

事件、RPC 与契约参考

历史、查询、版本化提供方与应用间通信限制。

事件用于通知事实,RPC 用于等待响应,契约用于共享带版本的方法。三种机制都在运行时内部工作;RPC 请求本身不会创建 HTTP 传输。

接收对象与返回值

事件回调接收 WuEvent;RPC 处理函数接收 payload 和包含关联、身份及取消信息的第二个参数。契约返回指向提供方方法的动态 proxy。emit、on、request、handle、provide 和 consume 的入门示例请参阅通信。

wu.handle(channel, handler, options) 保留 version、allow 和 replace。在生命周期中,context.wu.handle 还加入应用身份和 grants;微应用 handlers 应使用该 facade。

提供方生命周期

const release = wu.eventBus.handle('catalog:lookup', ({ productId }) => {
  return { productId, available: true };
}, { version: '1.0.0' });

const product = await wu.request('catalog:lookup', { productId: 'p-42' }, {
  version: '^1.0.0', timeout: 2500,
});
console.log(product.available);
release();

提供方所属者不可用时会释放提供方。拒绝或取消等待不会撤销已执行的副作用;处理函数必须协作处理 context.signal。历史和 replay 用于观察,不用于重复业务操作。

wu.hasHandler / eventBus.hasHandler

检查通道是否存在活动 RPC 提供方。

wu.hasHandler(channel: string): boolean

  • 参数: channel:精确通道名称。
  • 返回值: 表示是否存在的布尔值。
  • 错误: 存在不保证当前身份已授权,也不保证版本匹配。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 不安装新资源。
if (wu.hasHandler('catalog:lookup')) console.log('Proveedor disponible');

参考:src/core/wu-event-bus.js.

wu.eventBus.history

读取总线保留的 envelope 历史。

wu.eventBus.history: WuEvent[]

  • 参数: 无参数 getter;排除 history:false 的发布。
  • 返回值: 事件快照,默认上限 100。
  • 错误: 不一定包含会话全部历史。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 不安装新资源。
console.table(wu.eventBus.history.map(event => ({ name: event.name, app: event.appName })));

参考:src/core/wu-event-bus.js.

wu.eventBus.replay

向回调提供匹配的历史事件。

wu.eventBus.replay(pattern, callback): void

  • 参数: 模式与接收 WuEvent envelope 的回调。
  • 返回值: void;不会在总线重新发布事件。
  • 错误: 不重新执行 RPC 处理函数,也不恢复外部副作用。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 不保留订阅;接收未来事件请使用 on。
wu.eventBus.replay('catalog:*', event => console.log(event.data));

参考:src/core/wu-event-bus.js.

wu.eventBus.clearHistory

从历史移除事件,保留监听器和提供方。

wu.eventBus.clearHistory(pattern?): void

  • 参数: 可选模式;省略则清空全部历史。
  • 返回值: void。
  • 错误: 不删除消费者已保存的投影。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 不安装新资源。
wu.eventBus.clearHistory('catalog:*');

参考:src/core/wu-event-bus.js.

wu.eventBus.getStats

读取总线事件、订阅和提供方指标。

wu.eventBus.getStats(): object

  • 参数: 无参数。
  • 返回值: 计数器和配置对象。
  • 错误: 不衡量事件是否被业务接受。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 不安装新资源。
console.log(wu.eventBus.getStats());

参考:src/core/wu-event-bus.js.

wu.eventBus.matchesWildcard

检查事件模式,不注册订阅。

wu.eventBus.matchesWildcard(eventName, pattern): boolean

  • 参数: 先事件名称,后模式。
  • 返回值: 布尔值。
  • 错误: 匹配不授予使用资源的权限。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 不安装新资源。
console.log(wu.eventBus.matchesWildcard('catalog:selected', 'catalog:*'));

参考:src/core/wu-event-bus.js.

wu.contracts.has

查询契约是否存在及其 semver 兼容性。

wu.contracts.has(name: string, range?: string): boolean

  • 参数: 名称和范围,默认 *。
  • 返回值: boolean
  • 错误: 请检查结果;不测试外部服务可用性。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 不安装新资源。
console.log(wu.contracts.has('formatters', '^1.0.0'));

参考:src/core/wu-contracts.js.

wu.contracts.list

列出活动契约提供方。

wu.contracts.list(): Array<{name,version,app}>

  • 参数: 无参数。
  • 返回值: Array<{name,version,app}>
  • 错误: 请检查结果;不测试外部服务可用性。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 不安装新资源。
console.table(wu.contracts.list());

参考:src/core/wu-contracts.js.

wu.contracts.revoke

从宿主注册表按名称移除提供方。

wu.contracts.revoke(name: string): boolean

  • 参数: 精确名称;不存在时返回 false。
  • 返回值: boolean
  • 错误: 请检查结果;不测试外部服务可用性。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 使消费者 proxy 后续访问失效。
wu.contracts.revoke('formatters');

参考:src/core/wu-contracts.js.

wu.contracts.cleanup

撤销此契约实例的全部提供方。

wu.contracts.cleanup(): void

  • 参数: 无参数。
  • 返回值: void
  • 错误: 请检查结果;不测试外部服务可用性。
  • 权限: 宿主;scoped facade 不暴露全局管理。
  • 清理: 影响注册表的所有消费者。
wu.contracts.cleanup();

参考:src/core/wu-contracts.js.

WuEventBus.tap

观察总线事件,用于宿主监测。

bus.tap(callback): () => void

  • 参数: 事件回调;不是应用 scoped 监听器。
  • 返回值: 取消 tap 的函数。
  • 错误: 非函数值产生空 cleanup。
  • 权限: 独立实例属于创建它的宿主,不修改 WU singleton 的总线 facade。
  • 清理: 保存并执行 disposer;removeAll 不删除 taps。
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
const stop = bus.tap(event => console.log(event));
stop();

这些方法属于独立 WuEventBus 实例,wu.eventBus facade 不暴露它们。

参考:src/core/wu-event-bus.js.

WuEventBus.configure

更新总线配置,maxHistory 变化时裁剪历史。

bus.configure(config): void

  • 参数: maxHistory、enableReplay、enableWildcards、logEvents、strictMode 和 validateOrigin。
  • 返回值: void。
  • 错误: maxHistory 必须为非负安全整数,否则抛出 RangeError。
  • 权限: 独立实例属于创建它的宿主,不修改 WU singleton 的总线 facade。
  • 清理: 运行时所属者管理资源及其 cleanup 函数。
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
bus.configure({ maxHistory: 100 });

这些方法属于独立 WuEventBus 实例,wu.eventBus facade 不暴露它们。

参考:src/core/wu-event-bus.js.

WuEventBus.enableStrictMode

为后续总线操作启用严格检查。

bus.enableStrictMode(): void

  • 参数: 无参数。
  • 返回值: void。
  • 错误: 调用只修改配置;后续操作可能因验证失败。
  • 权限: 独立实例属于创建它的宿主,不修改 WU singleton 的总线 facade。
  • 清理: 运行时所属者管理资源及其 cleanup 函数。
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
bus.enableStrictMode();

这些方法属于独立 WuEventBus 实例,wu.eventBus facade 不暴露它们。

参考:src/core/wu-event-bus.js.

WuEventBus.disableStrictMode

禁用总线 strictMode 标志。

bus.disableStrictMode(): void

  • 参数: 无参数。
  • 返回值: void。
  • 错误: 调用不返回现有订阅诊断。
  • 权限: 独立实例属于创建它的宿主,不修改 WU singleton 的总线 facade。
  • 清理: 运行时所属者管理资源及其 cleanup 函数。
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
bus.disableStrictMode();

这些方法属于独立 WuEventBus 实例,wu.eventBus facade 不暴露它们。这是宿主决定,不是绕过 scoped facade grants 的机制。

参考:src/core/wu-event-bus.js.

WuEventBus.removeAll

移除监听器和 RPC 处理函数,并拒绝待处理 requests。

bus.removeAll(): void

  • 参数: 无参数。
  • 返回值: void。
  • 错误: 待处理请求以 WU_RPC_BUS_CLEARED 拒绝。
  • 权限: 独立实例属于创建它的宿主,不修改 WU singleton 的总线 facade。
  • 清理: 不清空历史或 taps;分别使用 clearHistory 和 tap 取消函数。
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
bus.removeAll();

这些方法属于独立 WuEventBus 实例,wu.eventBus facade 不暴露它们。

参考:src/core/wu-event-bus.js.

一起完善 WU

发现了问题?有新的想法?

你的使用体验能让 WU 变得更好。告诉我们遇到的问题,或支持项目的持续开发。