pub struct PluginContext { /* private fields */ }Expand description
发放到插件的上下文(on_init 传入;Clone 供插件自存)。
Implementations§
Source§impl PluginContext
impl PluginContext
Sourcepub fn put(&self, event: Event) -> Result<(), PutError>
pub fn put(&self, event: Event) -> Result<(), PutError>
广播出口:插件自发事件(业务 broadcast / eTo / eLog 均经此)。
Sourcepub fn notify(&self, target: &str, payload: Arc<dyn Any + Send + Sync>)
pub fn notify(&self, target: &str, payload: Arc<dyn Any + Send + Sync>)
定向通知出口:eTo.
Sourcepub fn plugins(&self) -> Vec<PluginInfo>
pub fn plugins(&self) -> Vec<PluginInfo>
枚举宿主内全部插件(含 Ready;快照含版本)。
Sourcepub fn services_of(&self, name: &str) -> Option<Arc<Vec<ServiceDesc>>>
pub fn services_of(&self, name: &str) -> Option<Arc<Vec<ServiceDesc>>>
某插件自报的完整服务目录(现场取 + 世代核对 + memoize)。 Ready 未 Running 亦可查(声明在注册时即静态可用)。 该插件不存在 → None。
Sourcepub fn find_service(&self, svc: &str) -> Vec<ProviderRef>
pub fn find_service(&self, svc: &str) -> Vec<ProviderRef>
按【服务 id】全宿主查找提供方(有序:注册序;含非 Running 状态 → 供消费方自裁)。 A 不需要预先知道提供方的注册名。
Sourcepub fn publish_services(&self, list: Vec<ServiceDesc>)
pub fn publish_services(&self, list: Vec<ServiceDesc>)
运行期重新申报自己的服务目录:宿主重织索引、作废缓存,双发 eSrvChg.<名>(版本串)
与 eSrvChg(固定键,PlugNotice)。
⚠ 纪律(DV4 教训):先换插件 services() 当前返回,再调用本方法 —— 宿主细节是现场取的,只申报不改内容会造成索引与 live 细节脱节。
(0.2.0:Rust 无运行期代码热换;「更新」的运行期形态 = 目录随配置/状态改版。)
Sourcepub fn ask<Req, Res>(
&self,
target: &str,
req: Req,
timeout: Duration,
) -> Result<Res, AskError>
pub fn ask<Req, Res>( &self, target: &str, req: Req, timeout: Duration, ) -> Result<Res, AskError>
请求出口:eReq.
禁止自呼:ask 指向自身 target 会占满自己的 worker 直到超时 (自己阻塞等自己的回包)——需要自身逻辑请直调。
时序:预检目标 Running → put → recv_timeout。
- 预检失败(不存在/未 Running/已 Quarantined)→ 立即
Err(TargetGone); - 回包
Ok(Res)且契约类型匹配 →Ok(Res); - 回包
Err(InvalidPayload)或 回包类型与本侧契约不一致 →Err(InvalidPayload); - 信道断连(handler panic/信封丢失/目标邮箱溢出被丢)→
Err(TargetGone)(尽快,不虚耗超时); - 等满时限 →
Err(Timeout); - put 失败(总线已停)→
Err(BusStopped)。
Sourcepub fn ask_service<Req, Res>(
&self,
svc: &str,
req: Req,
timeout: Duration,
) -> Result<Res, AskError>
pub fn ask_service<Req, Res>( &self, svc: &str, req: Req, timeout: Duration, ) -> Result<Res, AskError>
按服务 id 的请求出口(0.2.0):index 命中 → 现场类型闸门 → 发 eReq。
- 无人提供该服务 → 立即
Err(UnknownService)(零成本显错); - 有提供方但全都非 Running → 立即
Err(TargetGone); - Req 类型与服务声明的 req_type 不符 → 立即
Err(InvalidPayload)(把「绕一圈才发现错型」提前到发出之前); - 多提供方 → 取注册序第一个 Running 者;后续 failover 由发起方在收不到回包后自定。
其余失败面与
ask完全一致。
Trait Implementations§
Auto Trait Implementations§
impl Freeze for PluginContext
impl RefUnwindSafe for PluginContext
impl Send for PluginContext
impl Sync for PluginContext
impl Unpin for PluginContext
impl UnsafeUnpin for PluginContext
impl UnwindSafe for PluginContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more