10 个版本
0.1.7 | 2022 年 10 月 4 日 |
---|---|
0.1.6 | 2020 年 10 月 5 日 |
0.1.5 | 2020 年 8 月 7 日 |
0.1.4 | 2020 年 7 月 5 日 |
0.1.3-beta.5 | 2020 年 6 月 23 日 |
#7 在 #lapin
每月 21 次下载
22KB
487 代码行
Rabbit-Borough
基于 Lapin 的 RabbitMQ 抽象
消费者示例
fn main() {
let config: JSONConfiguration = configuration::reader::read("./config.json").unwrap();
println!("[{}] - Configuration read", line!(),);
LocalPool::new().run_until(async {
consume(&config, &handler).await;
})
}
fn handler(_delivery: &DeliveredMessage) -> HandleMessageResult {
// In order to read the message you need to convert the _delivery.data from a u8 vec to a utf8 string :
// std::str::from_utf8(&_delivery.data))
return HandleMessageResult::Ack;
}
发布者示例
fn main() {
let config: JSONConfiguration = configuration::reader::read("./config.json").unwrap();
println!("[{}] - Configuration read", line!(),);
LocalPool::new().run_until(async {
loop {
let outcome = publish(
"test".to_string(),
&config.binding.exchange,
&config.binding.routing_key,
config.connection.clone(),
)
.await;
println!("[{}] - {:?}", line!(), outcome);
let delay = time::Duration::from_millis(500);
thread::sleep(delay);
}
});
}
JSON 配置示例
整个配置支持默认实现。因此,如果默认假设对您适用,您不需要提供整个配置,只需提供您感兴趣的部分即可。
这是一个完整示例
{
"connection": {
"host": "127.0.0.1",
"port": 5672,
"vhost": "/",
"heartbeat": 10,
"connection_timeout": 1000,
"username": "secure",
"password": "secure",
"retry": 4
},
"binding": {
"queue": "myQueue",
"exchange": "myExchange",
"routing_key": "myKey",
"exchange_declaration_options": {
"passive": false,
"durable": true,
"auto_delete": false
}
},
"declare": {
"queue": true,
"exchange": true,
"binding": true
}
}
更多示例
有关更多示例,请访问 示例 仓库
示例包括
- 简单消费者
- 使用 postgres 连接池的消费者
- 带选项的消费者
- 简单发布者
- 带消息类型的发布者
想法
整个想法基本上是能够以最小的努力创建消费者项目,通过绕过模板、配置和复杂的弹性逻辑。
但在这个抽象中,大多数模块都是公开的,以便为自定义组合留下一些空间。
思考
鉴于我在几乎所有应用中都每天使用 rabbitMq,这个小型库可能是我在不久的将来可能会受益的东西。幸运的是,有人也能从中得到类似的益处。
依赖
~7–17MB
~272K SLoC