事件、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.