使用 Azure Event Hubs 构建 .NET 事件溯源系统,需将领域事件序列化并写入高吞吐消息管道;2. 定义不可变事件如 OrderCreated、OrderShipped,用 System.Text.Json 序列化为字节数组,并通过 ContentType 和 EventType 属性标识类型;3. 使用 EventHubProducerClient 批量发送事件,设置 PartitionKey 确保同一聚合根事件有序;4. 消费端通过 EventProcessorClient 结合 BlobCheckpointStore 实现至少一次处理,业务逻辑需幂等;5. 可选重建聚合时从指定分区读取事件流,高频场景引入快照减少回放开销;6. Event Hubs 适合作为 CQRS 架构中的事件分发通道,虽无版本管理与复杂查询,但保障了事件的有序性、不可变性与可重播性。

用 Azure Event Hubs 构建 .NET 事件溯源系统,核心是将领域事件持久化到高吞吐的消息管道中,并由消费者按顺序处理。Event Hubs 虽非传统事件存储(如 EventStoreDB),但结合正确设计,可支撑轻量级事件溯源架构。
事件溯源的基础是不可变的事件流。在 .NET 中,先定义清晰的事件类型:
public record OrderCreated(
Guid OrderId,
string CustomerName,
DateTime CreatedAt
);
public record OrderShipped(
Guid OrderId,
DateTime ShippedAt
);
使用 System.Text.Json 或 MessagePack 序列化事件为字节数组。建议附加事件类型名到消息属性,便于反序列化:
使用 Azure.Messaging.EventHubs.Producer.EventHubProducerClient 发布事件:
var producer = new EventHubProducerClient(connectionString, eventHubName);
using var eventBatch = await producer.CreateBatchAsync();
var eventData = new EventData(Encoding.UTF8.GetBytes(json));
eventData.ContentType = "application/json";
eventData.ApplicationProperties["EventType"] = "OrderCreated";
if (!eventBatch.TryAdd(eventData))
throw new Exception("Event too large");
await producer.SendAsync(eventBatch);
使用 EventProcessorClient 持久化处理检查点,确保至少一次语义:
var processor = new EventProcessorClient(
checkpointStore, // 如 BlobCheckpointStore
consumerGroup,
connectionString,
eventHubName);
processor.ProcessEventAsync += async args =>
{
var json = Encoding.UTF8.GetString(args.Data.Body);
var eventType = args.Data.ApplicationProperties["EventType"].ToString();
var domainEvent = DeserializeEvent(json, eventType);
await UpdateReadModel(domainEvent); // 写入数据库或缓存
await args.UpdateCheckpointAsync();
};
await processor.StartProcessingAsync();
若需重建聚合状态,从 Event Hub 读取特定分区(即聚合 ID 对应的流):
基本上就这些。Azure Event Hubs 提供了高吞吐、低延迟的事件管道,适合做事件分发。虽然它不支持事件版本管理或复杂查询,但在 CQRS + 事件溯源架构中,作为写模型的事件发布通道非常合适。关键在于保证事件不可变、有序、可重播。
以上就是如何用 Azure Event Hubs 构建 .NET 事件溯源?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号