Azure - 将事件中心消耗到DocumentDB(而不是存储帐户)

时间:2017-08-22 13:10:20

标签: c# asp.net azure azure-cosmosdb

我在Azure上运行了两个服务。 Event HubCosmosDB/DocumentDB数据库。 我的目标是使用WebApp服务将两者连接起来,以便在事件中心上获取的所有内容都被消耗并正确存储在数据库中。

我浏览了Quick Starts以及事件中心和CosmosDB的教程,我无法找到一种方法来连接两者。

我知道如何与DocumentDB建立连接,我知道如何使用事件中心的数据,但我无法做到这两点。这是交易:

要创建事件中心处理器主机,我只找到了以下构造函数

public EventProcessorHost(string eventHubPath, string consumerGroupName, string eventHubConnectionString, string storageConnectionString, string leaseContainerName)

storageConnectionString是官方教程中名为StorageAccountNameStorageAccountKey的两个字符串的组合。

实际上我的问题是,存储帐户是Azure上提供的另一项服务。我已经创建了一个用于测试目的,它工作正常但是,我需要将所有内容存储在DocumentDB CosmosDB数据库

我不排除需要通过存储帐户的可能性,但如果是这样,你能告诉我原因吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

事件中心处理器需要Azure存储的连接信息以进行租赁管理和检查指向。实际上,这意味着如果您的处理器的多个实例一起运行,那么找出谁正在从哪个事件中心读取分区的所有艰苦工作都将为您完全管理。

EventProcessor类非常通用。您只需将其子类化,然后实现public override Task HandleEventData(IEnumerable<EventData> data)。在这种方法中,您可以自由地将EventData写入Cosmos,或者根据事件中心发出的消息做任何您心愿的事情。例如:

class CosmosEventHubProcessor : EventProcessor
{
    private DocumentClient _documentClient;

    public CosmosEventHubProcessor()
    {
        // Initialize DocumentClient
    }

    public override Task HandleEventData(IEnumerable<EventData> data)
    {
        // Write data to Cosmos using DocumentClient
    }

}