#rabbitmq #consumer #amqp #lapin #configuration #abstraction #templating

rabbit_borough

通过绕过模板、配置和复杂的弹性逻辑,以最小的努力创建 RabbitMQ 消费者项目

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.52020 年 6 月 23 日

#7#lapin

每月 21 次下载

MIT 许可证

22KB
487 代码行

Rabbit-Borough

Rust 基于 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