Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

订阅

通过客户端 Channel 订阅工作流消息。

订阅消息

#![allow(unused)]
fn main() {
use acts_channel::{ActsChannel, ActsOptions};

let mut client = ActsChannel::connect("http://127.0.0.1:10080").await?;

// ActsOptions 的属性支持 glob 模式,如 "act*" 匹配所有以 act 开头的消息
let options = ActsOptions {
    state: Some("{created,completed}".to_string()),
    r#type: Some("act*".to_string()),
    // 其他配置
    ..ActsOptions::default()
};

let sub = client
    .subscribe(
        "client-1",
        move |message| {
            println!("{message:?}");
        },
        // 不结束订阅的故障:负载解码失败、自动 ack 失败
        move |err| eprintln!("subscription fault: {err}"),
        &options,
    )
    .await?;

// 订阅结束:服务端正常关闭为 Ok(()),流或连接失败为 Err(status)
if let Err(err) = sub.wait().await {
    eprintln!("subscription closed: {err}");
}
}

该 id 在服务端是调用者主体命名空间下的一段({subject}/{client_id}):不同主体的 两个订阅者都可以叫 client-1 而互不冲突;在 [acl] 下,订阅只承载该主体启动的流程 的消息,而不是所有租户的。见访问控制

消息类型

类型说明
workflow流程级别消息
step步骤级别消息
act活动消息