#pulsar #messaging #client #pubsub #build

venta

为 Pulsar 提供可靠的发布者接口

13 个版本 (8 个破坏性版本)

0.9.0 2022 年 3 月 28 日
0.8.1 2021 年 12 月 12 日
0.7.0 2021 年 6 月 30 日
0.4.0 2021 年 3 月 4 日
0.2.0 2020 年 11 月 11 日

#5 in #pulsar

每月 46 次下载

MIT/Apache

17KB
328

概述

Venta 是一个 Rust 库,实现了一个健壮、易用且非阻塞的 Apache Pulsar 发布者。它基于 pulsar-rs,但添加了一些缺失的部分

  1. Venta 在后台发布消息,这意味着只要队列空间足够,消息入队就会立即发生。这对于不希望在实际发布操作上阻塞的应用程序非常有用
  2. Venta 在 pulsar-rs 的基础上增加了重试和超时功能,允许它从导致 pulsar-rs 停滞或返回错误的错误中恢复
  3. 消息事件时间自动设置为将消息添加到队列的时间,允许消费者推断原始消息时间
  4. Venta 对于常见的用例(例如发布 JSON 消息、添加属性等)来说更加易用

使用方法

对于简单的用例,例如您希望配置一个具有主题名称和发布者名称的发布者,您可以使用 spawn_simple

    async fn f() -> anyhow::Result<()> {
        let producer = venta::BackgroundProducer::spawn_simple("pulsar://127.0.0.1", "topic_name", Some("producer_name".into())).await?;
        //...
        Ok(())
    }

对于您希望对发布者构建有更精细控制的用例,您可以使用 spawn 构造函数,接收创建发布者的闭包

    async fn f() -> anyhow::Result<()> {
        let producer = venta::BackgroundProducer::spawn(|| async {
            pulsar::Pulsar::builder("pulsar://127.0.0.1", pulsar::TokioExecutor)
              .build()
              .await?
              .producer()
              .with_topic("topic").build()
              .await
        }).await?;
        //...
        Ok(())
    }

有关如何构建底层客户端和发布者的更多信息,请参阅 pulsar-rs 的文档

一旦初始化了发布者,入队 JSON 消息就相对简单

    use serde_json::json;
    
    async fn f() -> anyhow::Result<()> {
        let producer = venta::BackgroundProducer::spawn_simple("pulsar://127.0.0.1", "topic_name", Some("producer_name".into())).await?;

        producer.produce().json(&json!({
            "message": "here"
        })).enqueue()
    }

Venta 发布者是 Clone,这意味着它们可以无任何问题地传递到代码的各个部分。

依赖关系

~13–26MB
~423K SLoC