#service-bus #amqp-client #amqp #azure #azure-sdk #cloud #sdk

azservicebus

为Azure Service Bus提供非官方的AMQP 1.0 Rust客户端

16个不稳定版本 (7个破坏性更新)

新功能 0.20.3 2024年8月14日
0.20.1 2024年7月19日
0.19.2 2024年2月22日
0.18.0 2023年12月13日
0.1.2 2023年2月7日

#492 in 网络编程

Download history 246/week @ 2024-04-23 179/week @ 2024-04-30 78/week @ 2024-05-07 104/week @ 2024-05-14 121/week @ 2024-05-21 81/week @ 2024-05-28 114/week @ 2024-06-04 144/week @ 2024-06-11 172/week @ 2024-06-18 238/week @ 2024-06-25 312/week @ 2024-07-02 305/week @ 2024-07-09 378/week @ 2024-07-16 247/week @ 2024-07-23 338/week @ 2024-07-30 237/week @ 2024-08-06

每月1,262次下载

MIT许可协议

590KB
11K SLoC

azservicebus

为Azure Service Bus提供非官方和实验性的AMQP 1.0客户端。

此crate的结构与dotnet sdk类似(Azure.Messaging.ServiceBus),并且比azure_messaging_servicebus提供更多功能。支持的服务总线功能列表如下(支持的服务总线功能)。在REST客户端和AMQP 1.0客户端中支持的功能的完整比较可以在此处找到(此处)。

因为此crate目前位于azure-sdk-for-rust的分支中,而GitHub似乎不允许在分支中提出问题。如果您有任何问题/功能请求,请使用GitHub上游的AMQP 1.0 crate fe2o3-amqp

内容

示例

以下是发送和接收队列消息的两个示例。更多示例可以在示例中找到

向队列发送消息

use azservicebus::prelude::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Replace "<NAMESPACE-CONNECTION-STRING>" with your connection string,
    // which can be found in the Azure portal and should look like
    // "Endpoint=sb://<NAMESPACE>.servicebus.windows.net/;SharedAccessKeyName=<KEY_NAME>;SharedAccessKey=<KEY_VALUE>"
    let mut client = ServiceBusClient::new_from_connection_string(
        "<NAMESPACE-CONNECTION-STRING>",
        ServiceBusClientOptions::default()
    )
    .await?;

    // Replace "<QUEUE-NAME>" with the name of your queue
    let mut sender = client.create_sender(
        "<QUEUE-NAME>",
        ServiceBusSenderOptions::default()
    )
    .await?;

    // Create a batch
    let mut message_batch = sender.create_message_batch(Default::default())?;

    for i in 0..3 {
        // Create a message
        let message = ServiceBusMessage::new(format!("Message {}", i));
        // Try to add the message to the batch
        if let Err(e) = message_batch.try_add_message(message) {
            // If the batch is full, an error will be returned
            println!("Failed to add message {} to batch: {:?}", i, e);
            break;
        }
    }

    // Send the batch of messages to the queue
    match sender.send_message_batch(message_batch).await {
        Ok(()) => println!("Batch sent successfully"),
        Err(e) => println!("Failed to send batch: {:?}", e),
    }

    sender.dispose().await?;
    client.dispose().await?;

    Ok(())
}

从队列接收消息

use azservicebus::prelude::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Replace "<NAMESPACE-CONNECTION-STRING>" with your connection string,
    // which can be found in the Azure portal and should look like
    // "Endpoint=sb://<NAMESPACE>.servicebus.windows.net/;SharedAccessKeyName=<KEY_NAME>;SharedAccessKey=<KEY_VALUE>"
    let mut client = ServiceBusClient::new_from_connection_string(
        "<NAMESPACE-CONNECTION-STRING>",
        ServiceBusClientOptions::default()
    )
    .await?;

    // Replace "<QUEUE-NAME>" with the name of your queue
    let mut receiver = client.create_receiver_for_queue(
        "<QUEUE-NAME>",
        ServiceBusReceiverOptions::default()
    )
    .await?;

    // Receive messages from the queue
    // This will wait indefinitely until at least one message is received
    let messages = receiver.receive_messages(3).await?;

    for message in &messages {
        let body = message.body()?;
        println!("Received message: {:?}", std::str::from_utf8(body)?);

        // Complete the message so that it is removed from the queue
        receiver.complete_message(message).await?;
    }

    receiver.dispose().await?;
    client.dispose().await?;

    Ok(())
}

支持的服务总线功能

以下显示支持的服务总线功能

功能 支持
向队列/主题发送消息
从队列/订阅接收消息
队列/订阅的会话接收器
预取
计划消息
取消计划的消息
预览消息
完成消息
放弃消息
延迟消息
接收延迟消息
死信消息
接收死信消息
批处理
管理订阅的规则筛选器
锁续订
交易 尚未
处理器 尚未
会话处理器 尚未

TLS支持

客户端应用程序与Azure Service Bus命名空间的通信使用传输层安全性(TLS)加密。TLS实现通过相应的功能标志暴露给用户(请参阅下面的功能标志部分)。用户应确保启用rustlsnative-tls功能,并且只能启用一个TLS实现。同时启用这两个功能是不支持的,会导致编译时错误。

native-tls功能默认启用,并使用native-tls存储库提供TLS支持。rustls功能将使用rustls存储库和webpki-roots存储库提供TLS支持。

功能标志

此存储库支持以下功能标志

功能 描述
默认 启用"native-tls"功能
rustls 启用使用rustls存储库以支持TLS
native-tls 启用使用native-tls存储库以支持TLS
事务 此部分保留用于将来对事务的支持,目前尚未实现

WebAssembly支持

WebAssembly受支持。请参阅wasm32_in_browser示例以获取更多详细信息。

MSRV(最低支持的Rust版本)

1.75.0

许可:MIT

依赖项

~15–30MB
~483K SLoC