Azure Eventhub Rust

作者 microsoft354361d83247MIT收录于 2026年10月8日更新于 2026年10月8日

Azure Event Hubs library for Rust. Send and receive events for streaming data ingestion and batch processing. Triggers: "event hubs rust", "ProducerClient rust", "ConsumerClient rust", "send event rust", "streaming rust", "eventhub rust".

精选仅含说明Software Development
AI 生成的概览

指导 Rust 开发者使用 azure_messaging_eventhubs crate 发送和接收 Azure Event Hubs 事件。

功能
说明如何添加官方 azure_messaging_eventhubs crate,并编写 Rust 代码完成身份验证、用 ProducerClient 发送单个或批量事件,以及用 ConsumerClient 从分区接收事件。内容涵盖凭据选择、起始位置、事件正文提取、RBAC 角色和最佳实践,并配有代码片段。
适用场景
适用于 Rust 应用需要向 Azure Event Hubs 发布事件,或需要从分区消费并处理事件的场景,包括为提升吞吐量进行批量发送以及控制消费起始位置。
运行要求
需要 Rust 工具链和 cargo;依赖 azure_messaging_eventhubs、azure_identity、tokio、futures 等 crate(必要时加 azure_core);需要 Azure Event Hubs 命名空间和事件中心名称,通过 EVENTHUBS_HOST 与 EVENTHUB_NAME 环境变量提供;需要具备 Event Hubs 发送者、接收者或所有者角色的 Entra ID 凭据。仅为说明文档,不含脚本。

Azure Event Hubs library for Rust

Client library for Azure Event Hubs — send and receive events for streaming data ingestion.

Use this skill when:

  • An app needs to send events to Azure Event Hubs from Rust
  • You need to receive and process events from partitions
  • You need batch sending for throughput optimization
  • You need to control consumer start position

IMPORTANT: Only use the official azure_messaging_eventhubs crate published by the azure-sdk crates.io user. Do NOT use unofficial or community crates. Official crates use underscores in names and none have version 0.21.0.

Installation

sh
cargo add azure_messaging_eventhubs azure_identity tokio futures

DeveloperToolsCredential::new(None)? already returns an Arc<DeveloperToolsCredential>, so you can pass or clone it directly into .open(). Add azure_core only when you need direct azure_core imports such as ErrorKind.

Environment Variables

bash
EVENTHUBS_HOST=<namespace>.servicebus.windows.net # Required — fully qualified namespaceEVENTHUB_NAME=<eventhub-name>                     # Required — name of the Event Hub

Key Concepts

ConceptDescription
NamespaceContainer for one or more Event Hubs
Event HubStream of events, partitioned for parallel reads
PartitionOrdered, append-only sequence of events
ProducerSends events via ProducerClient
ConsumerReceives events from partitions via ConsumerClient

Authentication

Rust Azure SDK code must not use DefaultAzureCredential. The Rust identity crate does not provide that type.

rust
use azure_identity::DeveloperToolsCredential;use azure_messaging_eventhubs::ProducerClient;
#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> {    // Local dev: DeveloperToolsCredential. Production: use ManagedIdentityCredential.    let credential = DeveloperToolsCredential::new(None)?;
    let producer = ProducerClient::builder()        .open(            "<namespace>.servicebus.windows.net",            "<eventhub-name>",            credential.clone(),        )        .await?;    Ok(())}

Prefer the crate README/examples when checking builder signatures and receive-stream event wrapper shapes.

Core Workflow

Send Events

rust
// Send a single eventproducer.send_event(vec![1, 2, 3, 4], None).await?;

Send Batch

rust
let batch = producer.create_batch(None).await?;batch.try_add_event_data(vec![1, 2, 3, 4], None)?;
producer.send_batch(batch, None).await?;

Receive Events

rust
use azure_identity::DeveloperToolsCredential;use azure_messaging_eventhubs::ConsumerClient;
// Local dev: DeveloperToolsCredential. Production: use ManagedIdentityCredential.let credential = DeveloperToolsCredential::new(None)?;let consumer = ConsumerClient::builder()    .open(        "<namespace>.servicebus.windows.net",        "<eventhub-name>".to_string(),        credential.clone(),    )    .await?;

Receive from Partition

rust
use futures::stream::StreamExt;use azure_messaging_eventhubs::{    ConsumerClient, OpenReceiverOptions, StartLocation, StartPosition,};
let receiver = consumer    .open_receiver_on_partition(        "0".to_string(),        Some(OpenReceiverOptions {            start_position: Some(StartPosition {                location: StartLocation::Earliest,                ..Default::default()            }),            ..Default::default()        }),    )    .await?;
let mut stream = receiver.stream_events();while let Some(event_result) = stream.next().await {    match event_result {        // Body is on the inner event data, not the received wrapper: `event.event_data().body()`.        Ok(event) => {            let body = event.event_data().body().unwrap_or_default();            println!("Received: {:?}", body);        }        Err(err) => eprintln!("Error: {:?}", err),    }}

RBAC Roles

For Entra ID auth, assign one of these roles:

RoleAccess
Azure Event Hubs Data SenderSend events
Azure Event Hubs Data ReceiverReceive events
Azure Event Hubs Data OwnerFull access

Best Practices

  1. Use cargo add to manage dependencies, never edit Cargo.toml directly. Add and remove Rust SDK dependencies with cargo commands instead of manual manifest edits.
  2. Pass or clone credentials directly into .open(). DeveloperToolsCredential::new(None)? already returns an Arc, so you do not need to annotate the binding as Arc<dyn TokenCredential> unless you are naming that trait object type explicitly.
  3. Match the builder signature. ProducerClient::builder().open(...) takes the hub name as &str, while ConsumerClient::builder().open(...) takes an owned String.
  4. Use DeveloperToolsCredential for local dev, ManagedIdentityCredential for production — Rust does not provide a single DefaultAzureCredential type
  5. Never hardcode credentials — use environment variables or managed identity
  6. Use batching — create_batch + send_batch for throughput optimization
  7. Handle errors per event — match on Ok/Err in the event stream
  8. Extract event bodies via event.event_data().body(), not event.body() — ReceivedEventData wraps the underlying EventData.
  9. Specify start position — use StartLocation::Earliest or StartLocation::Latest to control where consumption begins
  10. Run cargo clippy -- -D warnings when the prompt, eval, or CI expects lint-clean output

Reference Links

来源与署名

来源:microsoft/skills位于.github/plugins/azure-sdk-rust/skills/azure-eventhub-rust提交354361d

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架