Skip to main content

Crate ek_core

Crate ek_core 

Source
Expand description

ek-core —— 插件宿主 + Actor-over-Bus 运行时(基于已发布的 ek-event 0.1.0)。

核心协议:

  • 收 = 插件唯一入口 Plugin::on_mail;订阅面由 Plugin::routes 声明, 宿主 start() 时为每条 route 装配 forwarder(bounded 邮箱 + try_send,零阻塞)。
  • 发 = 插件唯一出口 PluginContext:put(广播/业务日志)、 ask(eReq+Oneshot 请求)、notify(eTo)。
  • 宿主不执行业务、零业务类型、零日志(0.3.0):插件之间不直调; 依赖在 add_plugin 时显式声明,start 按 deps 拓扑序装配,close 按逆序五步回收。
  • 宿主想说的话全是结构化事件:ePlugUp/ePlugDown/ePlugQDown.<名>/eSrvChg (见 lifecycle);运维诊断文本只走 stderr,不进总线不占类型。 业务日志与本宿主无关(插件自造自投,业务链上用 ek-data 的 LogData 到 “eLog”)。

故障面:handler panic 由 worker catch_unwind 隔离,连续 PANIC_LIMIT 次 → Quarantined (worker 自退 + ePlugQDown.<name> 结构化广播);邮箱有界,溢出丢弃计数最终一致 (stats.spilled,节流 stderr 提示)。

Re-exports§

pub use context::PluginContext;
pub use envelope::e_req_type;
pub use envelope::e_to_type;
pub use envelope::Envelope;
pub use envelope::OneshotErr;
pub use envelope::OneshotReceiver;
pub use envelope::OneshotSender;
pub use envelope::ReplyErr;
pub use error::AskError;
pub use error::PluginError;
pub use lifecycle::EVENT_PLUG_DOWN;
pub use lifecycle::EVENT_PLUG_DOWN_EVENT_PREFIX;
pub use lifecycle::EVENT_PLUG_DOWN_PREFIX;
pub use lifecycle::EVENT_PLUG_UP;
pub use lifecycle::EVENT_PLUG_UP_PREFIX;
pub use lifecycle::EVENT_SRV_CHG;
pub use lifecycle::EVENT_SRV_CHG_PREFIX;
pub use main_engine::MailStats;
pub use main_engine::MainEngine;
pub use main_engine::PluginInfo;
pub use main_engine::PluginState;
pub use plugin::Plugin;
pub use plugin::MAILBOX_CAP;
pub use plugin::PANIC_LIMIT;
pub use service::PlugNotice;
pub use service::ProviderRef;
pub use service::ServiceDesc;

Modules§

context
PluginContext —— 插件的唯一出口(put / ask / notify / 发现四问)。
envelope
请求应答信封与一次性信道(envelope + Oneshot)。
error
错误体系:全部公共 API 的错误面。
lifecycle
生命周期与服务改版的事件类型串(宿主「说话」的全部通道,零日志)。
main_engine
MainEngine —— 纯插件宿主:单表注册、(typed)获取、(deps)拓扑 start、 逆序五步 close、单插件 remove(允许+警告)、运行统计查询。零业务方法。
plugin
Plugin trait —— 插件实现的唯一契约(业务与宿主的边界)。
registry
注册表(内部):单表统一 add / get / typed get / remove; 状态原子 CAS;能力索引(svc_id → 提供方列表)+ 改版世代计数 + services 现场缓存; start 拓扑序。
service
服务声明与解析(0.2.0 新增):插件自报目录、宿主持【纯路由索引】。
worker
worker(插件串行 actor 线程):邮箱消费 + catch_unwind 隔离 + 熔断(D3)。