Broker
英文版本为准
本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。
处理器、路由器、编解码器和中间件都不依赖 Broker。把服务换到另一个 Broker,你只需要改 with_broker
里的一行。
框架自带一个完整的内存 Broker,用于单个应用内部的队列。基于外部服务的 Broker 是独立的 crate,加进
依赖即可使用。
每个 Broker crate 都有自己的文档站点,链接在下表的“文档”列和 Broker 菜单里。
要为别的传输实现 Broker,参见编写一个 Broker。
切换 Broker
每个 Broker 都是同步构造的,运行时在应用启动时连接它。下面的例子里,只有构造 Broker 的那一行不同。
use ruststream::memory::MemoryBroker;
use ruststream::runtime::{AppInfo, RustStream};
#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("orders", "0.1.0"))
.with_broker(MemoryBroker::new(), |b| b.include_router(routes::orders()))
}
use ruststream::runtime::{AppInfo, RustStream};
use ruststream_nats::NatsBroker;
#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("orders", "0.1.0"))
.with_broker(NatsBroker::new("nats://localhost:4222"), |b| {
b.include_router(routes::orders())
})
}
use ruststream::runtime::{AppInfo, RustStream};
use ruststream_fred::RedisBroker;
#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("orders", "0.1.0"))
.with_broker(RedisBroker::standalone("redis://localhost:6379"), |b| {
b.include_router(routes::orders())
})
}
use ruststream::runtime::{AppInfo, RustStream};
use ruststream_lapin::LapinBroker;
#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("orders", "0.1.0"))
.with_broker(LapinBroker::new("amqp://localhost:5672"), |b| {
b.include_router(routes::orders())
})
}
use ruststream::runtime::{AppInfo, RustStream};
use ruststream_rdkafka::KafkaBroker;
#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("orders", "0.1.0"))
.with_broker(
KafkaBroker::new(["localhost:9092"]).default_group("orders"),
|b| {
b.include_router(routes::orders())
},
)
}
每个 Broker crate 在自己的文档里说明连接选项。订阅需要 Broker 专有的选项时(消费者组、
durable 名称),你可以在 #[subscriber(..)] 属性里给出该 Broker 的描述符;参见
Broker 专有的描述符。