summer-pubsub插件
summer-pubsub是基于google-cloud-rust实现的
google-cloud-pubsub 是一个用于与 Google Cloud Pub/Sub API 交互的库。
依赖
summer-pubsub = { version = "<version>" }
配置项
[pubsub]
enabled = true # 是否启用 pubsub 插件,默认 true
project_id = "your-project-id" # Google Cloud 项目的 project id
credentials = "path/to/credentials.json" # 凭证文件路径
endpoint = "https://pubsub.googleapis.com" # 如果使用 pubsub 模拟器,可指定 API endpoint
凭证文件是一个 JSON 文件,包含访问 pubsub API 所需的认证信息。你可以从 Google Cloud Console 获取该文件。
组件
当插件启用时,会自动注册一个 PubSubSubscriber 组件。
PubSubProducer 是一个用于向 pubsub topic 发布消息的组件。
此外,你可以为每个订阅创建一个 handler,并将其注册到应用中。
#[pubsub_listener("users_created_listener")]
async fn on_users_created_message(msg: Message) {
println!("Received message: {:?}", msg);
}
在 handler 中,你可以使用 Component 提取应用中注册的组件,或者使用 Config 获取配置。
use summer::extractor::{Component, Config};
use summer_pubsub::{PubSubConfig, pubsub_listener, Message};
use summer_sqlx::ConnectPool;
#[pubsub_listener("users_created_listener")]
async fn on_users_created_message(
Config(_pubsub_config): Config<PubSubConfig>, // 如果需要,可以在这里引入其他配置
msg: Message,
Component(_pool): Component<ConnectPool>,
) {
println!("Received message: {:?}", msg);
}
handler 中参数的顺序并不重要,你可以根据需要自由排列。
你也可以在 Web handler 中结合使用 PubSubProducer,向 pubsub topic 发布消息。
use summer_web::axum::response::IntoResponse;
use summer_web::extractor::Component;
use summer_web::get;
use summer_pubsub::{PubSubProducer};
use summer_pubsub::model::Message;
#[get("/pubsub")]
async fn pubsub(
Component(producer): Component<PubSubProducer>,
) -> impl IntoResponse {
let message = Message::new()
.set_data("Hello, world!".as_bytes());
producer.publish("users_created", message).await;
(StatusCode::OK, "Message published").into_response()
}