问题描述

使用Azure Event Hub服务,除了正常的生产,消费消息以外,如果想拿到Event Hub中存储的历史消息?有什么方法呢?

 

问题解答

获取 Event Hubs 存储的历史消息,首先需要确保消息进入Event Hub的时间处于保留期限(Retention Days)内,因为超过这个期限消息会被删除。

如果确认在期限内,在代码中可以指定时间或者对应的offset获取对应的消息。以Java为例可以参考以下sample:

【Azure 事件中心】Event Hubs如何获取其中存放的历史消息_github

如果需要从最早的消息,可以直接使用 EventPosition.Earliest(),也可以使用fromEnqueuedTime,参照:https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/models/EventPosition.java

当然,使用Service Bus Explorer工具也能获取到Event Hub中的数据,下载地址:https://github.com/paolosalvatori/ServiceBusExplorer

当创建Listener 之后,可以指定start time

【Azure 事件中心】Event Hubs如何获取其中存放的历史消息_java_02

 

参考资料

Event Hub事件保留:https://docs.azure.cn/zh-cn/event-hubs/event-hubs-features#event-retention