用途
Azure Event Hubs 是 Azure 上的大数据流式平台与事件摄取服务。本技能为 Rust 提供对应的客户端库 azure_messaging_eventhubs,用于向 Event Hub 发送事件以及从分区接收事件,实现流式数据摄取。
核心概念
- Namespace:Event Hub 的容器。
- Event Hub:可分区的事件流,用于并行处理。
- Partition:有序的事件序列。
- Producer:向 Event Hub 发送事件。
- Consumer:从分区接收事件。
安装与配置
安装命令:
cargo add azure_messaging_eventhubs azure_identity
环境变量:
EVENTHUBS_HOST=<namespace>.servicebus.windows.net
EVENTHUB_NAME=<eventhub-name>
主要能力
生产者客户端
创建 Producer:
use azure_identity::DeveloperToolsCredential;
use azure_messaging_eventhubs::ProducerClient;
let credential = DeveloperToolsCredential::new(None)?;
let producer = ProducerClient::builder()
.open("<namespace>.servicebus.windows.net", "eventhub-name", credential.clone())
.await?;
发送单个事件:
producer.send_event(vec![1, 2, 3, 4], None).await?;
发送批量事件:
let batch = producer.create_batch(None).await?;
batch.try_add_event_data(b"event 1".to_vec(), None)?;
batch.try_add_event_data(b"event 2".to_vec(), None)?;
producer.send_batch(batch, None).await?;
消费者客户端
创建 Consumer:
use azure_messaging_eventhubs::ConsumerClient;
let credential = DeveloperToolsCredential::new(None)?;
let consumer = ConsumerClient::builder()
.open("<namespace>.servicebus.windows.net", "eventhub-name", credential.clone())
.await?;
接收事件:
// Open receiver for specific partition
let receiver = consumer.open_partition_receiver("0", None).await?;
// Receive events
let events = receiver.receive_events(100, None).await?;
for event in events {
println!("Event data: {:?}", event.body());
}
获取 Event Hub 属性:
let properties = consumer.get_eventhub_properties(None).await?;
println!("Partitions: {:?}", properties.partition_ids);
获取分区属性:
let partition_props = consumer.get_partition_properties("0", None).await?;
println!("Last sequence number: {}", partition_props.last_enqueued_sequence_number);
最佳实践
- 复用客户端:创建一次,多次发送事件。
- 使用批量:比逐条发送更高效。
- 检查批量容量:
try_add_event_data在批量已满时返回 false。 - 并行处理分区:每个分区可独立消费。
- 使用消费者组:隔离不同的消费应用程序。
- 处理检查点:分布式消费者可使用
azure_messaging_eventhubs_checkpointstore_blob。
检查点存储(可选)
用于带检查点功能的分布式消费者:
cargo add azure_messaging_eventhubs_checkpointstore_blob
参考链接
- API Reference:https://docs.rs/azure_messaging_eventhubs
- Source Code:https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/eventhubs/azure_messaging_eventhubs
- crates.io:https://crates.io/crates/azure_messaging_eventhubs
适用场景
需要在 Rust 项目中接入 Azure Event Hubs,进行事件发送、接收或流式数据摄取时适用。
限制
- 仅在任务明确匹配上述范围时使用。
- 不应将输出视为环境特定验证、测试或专家评审的替代品。
- 当缺少必要输入、权限、安全边界或成功标准时,应停止并请求澄清。
- 收费、价格、平台、效果等其他信息暂未提供。