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 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 直到超时 (自己阻塞等自己的回包,worker 无法转去处理请求)——需要自身逻辑请直调。
时序:预检目标 Running → put → recv_timeout。
- 预检失败(不存在/未 Running/已 Quarantined)→ 立即
Err(TargetGone); - 回包
Ok(Res)且契约类型匹配 →Ok(Res); - 回包
Err(InvalidPayload)或 回包类型与本侧契约不一致 →Err(InvalidPayload); - 信道断连(handler panic/信封丢失/目标邮箱溢出被丢)→
Err(TargetGone)(尽快,不虚耗超时); 注:目标邮箱溢出时 forwarder 弃整个请求事件,信封随之 drop → 回包信道立即关闭, 发起方走 TargetGone 快失败;同时宿主侧有溢出丢弃 eLog 节流告警(可追溯); - 等满时限 →
Err(Timeout); - put 失败(总线已停)→
Err(BusStopped)。
TargetGone 的即时性为「尽力而为」:预检 + 断连快失败覆盖绝大多数场合; 极端 TOCTOU 窗口(预检后瞬间目标下线且断连未被感知)由 Timeout 兜底。
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