为每十个事件中心创建新的事件中心命名空间的最佳方法

时间:2020-01-30 16:39:36

标签: c# azure azure-eventhub azure-sdk

由于每个命名空间只允许10个事件中心,所以我正在寻找一种好的算法,可以为列表中的每十个事件中心创建一个新的命名空间。

注意:事件中心名称空间的列表正在传递给方法。

var eventHubResources = GetRequiredService<List<EventHubResource>>();
foreach (var eventHubResource in eventHubResources)
{
    eventHubResource.ResourceGroup = resourceGroup;
    MyNamespace.IEventHub eventHub = new EventHub(logger);
    if (eventHubResource.CaptureSettings == null)
    {
       if (eventHubResources.IndexOf(eventHubResource) <= 9) 
       {
           await eventHub.CreateEventHubAsync(azure, eventHubNamespace[0], eventHubResource, null);
       }
       if ((eventHubResources.IndexOf(eventHubResource) > 9) && (eventHubResources.IndexOf(eventHubResource) <= 19)) 
       {
           await eventHub.CreateEventHubAsync(azure, eventHubNamespace[1], eventHubResource, null);
       }
       // and so on....
    }
    else
    {
       await eventHub.CreateEventHubAsync(azure, eventHubNamespace, eventHubResource, storageAccount);
    }
}

与上述情况相比,有什么更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

我没有测试代码,但是您可以理解。

public static async Task CreateNamespaces(List<string> eventhubNames, ServiceClientCredentials creds) {

int totalEventHubsInNamespace = 0;

var ehClient = new EventHubManagementClient(creds)
{
    SubscriptionId = "<my subscription id>"
};

foreach (var ehName in eventhubNames)
{
    if (totalEventHubsInNamespace == 0)
    {
        var namespaceParams = new EHNamespace()
        {
            Location = "<datacenter location>"
        };

        // Create namespace
        var namespaceName = "<populate some unique namespace>";
        Console.WriteLine($"Creating namespace... {namespaceName}");
        await ehClient.Namespaces.CreateOrUpdateAsync(resourceGroupName, namespaceName, namespaceParams);
        Console.WriteLine("Created namespace successfully.");
    }

    // Create eventhub.
    Console.WriteLine($"Creating eventhub {ehName}");
    var ehParams = new Eventhub() { }; // Customize you eventhub here if you need.
    await ehClient.EventHubs.CreateOrUpdateAsync(resourceGroupName, namespaceName, ehName, ehParams);
    Console.WriteLine("Created Event Hub successfully.");

    totalEventHubsInNamespace++;
    if (totalEventHubsInNamespace >= 10)
    {
        totalEventHubsInNamespace = 0;
    }
}

}