.NET (Azure.Messaging.EventHubs) Azure Event Hubs'a olay gönderme ve bu olaylardan olay alma

Bu hızlı başlangıçta, Azure.Messaging.EventHubs .NET kitaplığını kullanarak olay hub'larına olay gönderme ve olay hub'larından olay alma hakkında bilgi ve destek alın.

Önkoşullar

Yeni bir Azure Event Hubs, bu hızlı Event Hubs önce genel bakış'a bakın.

Bu hızlı başlangıç işlemini tamamlamak için aşağıdaki önkoşullara ihtiyacınız vardır:

  • Microsoft Azure aboneliğini seçin. Azure hizmetlerini kullanmak için Azure Event Hubs aboneliğiniz gerekir. Mevcut bir Azure hesabınız yoksa, ücretsiz deneme sürümüne kaydolabilirsiniz veya bir hesap sanız MSDN abone avantajlarınızı kullanabilirsiniz.
  • Microsoft Visual Studio 2019. İstemci Azure Event Hubs kitaplığı, C# 8.0'da tanıtıldı yeni özellikleri kullanır. Kitaplığı önceki C# dil sürümleriyle kullanmaya devam edin, ancak yeni söz dizimi kullanılamaz. Tam söz diziminin kullanılması için, 3.0 veya .NET Core SDK ve dil sürümü olarak ayarlanmış şekilde derlemeniz latest önerilir. Visual Studio kullanıyorsanız, Visual Studio 2019'dan önceki sürümler C# 8.0 projeleri oluşturmak için gereken araçlarla uyumlu değildir. Visual Studio sürümü dahil olmak üzere 2019 Community buradan indirilebilir.
  • Ad alanı Event Hubs olay hub'ı oluşturun. İlk adım Azure portal kullanarak Event Hubs türünde bir ad alanı oluşturmak ve uygulamanın olay hub'ı ile iletişim kurması için gereken yönetim kimlik bilgilerini almaktır. Ad alanı ve olay hub'ı oluşturmak için bu makaledeki yordamı izleyin. Ardından, şu makaledeki yönergeleri izleyerek Event Hubs ad alanı için bağlantı dizesini edinebilirsiniz: Bağlantı dizesini al. Bağlantı dizesini bu hızlı başlangıçta daha sonra kullanacağız.

Olayları gönderme

Bu bölümde, olayları bir olay hub'larına göndermek için bir .NET Core konsol uygulamasının nasıl oluşturularak ilgili bilgi yer almaktadır.

Konsol uygulaması oluşturma

  1. Visual Studio 2019’u başlatın.

  2. Yeni proje oluştur'a seçin.

  3. Yeni proje oluştur iletişim kutusunda aşağıdaki adımları uygulayın: Bu iletişim kutusunu görmüyorsanız menüde Dosya'ya tıklayın, Yeni 'yi seçin ve sonra da Yeni'yi Project.

    1. Programlama dili olarak C# öğesini seçin.

    2. Uygulamanın türü olarak Konsol'ı seçin.

    3. Sonuç listesinden Konsol Uygulaması'nu seçin.

    4. Ardından, Sonraki'yi seçin.

      Yeni Dosya iletişim Project gösteren resim

  4. Proje adı olarak EventHubsSender, çözüm adı olarak EventHubsQuickStart girin ve projeyi oluşturmak için Tamam'ı seçin.

    Çözüm ve proje adlarını girdiğiniz sayfayı gösteren resim

Event Hubs NuGet paketini ekleme

  1. Menüden > Araçlar NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu'nu seçin.

  2. Aşağıdaki komutu çalıştırarak Azure.Messaging.EventHubs NuGet yükleyin:

    Install-Package Azure.Messaging.EventHubs
    

Olay hub'a olay göndermek için kod yazma

  1. usingAşağıdaki deyimlerini Program.cs dosyasının en üstüne ekleyin:

    using System;
    using System.Text;
    using System.Threading.Tasks;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Producer;
    
  2. Bağlantı dizesi ve Program olay hub'ı Event Hubs için sınıfına sabitler ekleyin.

        // connection string to the Event Hubs namespace
        private const string connectionString = "<EVENT HUBS NAMESPACE - CONNECTION STRING>";
    
        // name of the event hub
        private const string eventHubName = "<EVENT HUB NAME>";
    
        // number of events to be sent to the event hub
        private const int numOfEvents = 3;
    

    Not

    Yer tutucu değerlerini ad alanınıza bağlantı dizesi ve olay hub'ını adı ile değiştirin. Bağlantı dizesinin ad alanı düzeyinde bağlantı dizesi olduğundan emin olun.

  3. Aşağıdaki statik özelliği sınıfına Program ekleyin. Kod açıklamalarını görme.

        // The Event Hubs client types are safe to cache and use as a singleton for the lifetime
        // of the application, which is best practice when events are being published or read regularly.
        static EventHubProducerClient producerClient;    
    
  4. yöntemini Main aşağıdaki yöntemle async Main değiştirin. Ayrıntılar için kod açıklamalarını görme.

        static async Task Main()
        {
            // Create a producer client that you can use to send events to an event hub
            producerClient = new EventHubProducerClient(connectionString, eventHubName);
    
            // Create a batch of events 
            using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
    
            for (int i = 1; i <= numOfEvents; i++)
            {
                if (! eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes($"Event {i}"))))
                {
                    // if it is too large for the batch
                    throw new Exception($"Event {i} is too large for the batch and cannot be sent.");
                }
            }
    
            try
            {
                // Use the producer client to send the batch of events to the event hub
                await producerClient.SendAsync(eventBatch);
                Console.WriteLine($"A batch of {numOfEvents} events has been published.");
            }
            finally
            {
                await producerClient.DisposeAsync();
            }
        }
    
  5. Projeyi derleme ve hata yok olduğundan emin olun.

  6. Programı çalıştırın ve onay iletiyi bekleyin.

    A batch of 3 events has been published.
    
  7. Bu Azure portal, olay hub' ın olayları almış olduğunu doğrular. Ölçümler bölümünde İletiler görünümüne geçiş. Grafiği güncelleştirmek için sayfayı yenileyin. İletilerin alınmıştır olduğunu göstermek birkaç saniye sürebilir.

    Olay hub' Azure portal olay hub'larının olayları aldıklarını doğrulamak için uygulama sayfasının görüntüsü

    Not

    Daha fazla bilgi açıklaması olan tam kaynak kodu için aşağıdaki dosyada bu dosyaya GitHub

Olayları alma

Bu bölümde, bir olay işlemcisi kullanarak bir olay hub'larından olayları alan bir .NET Core konsol uygulamasının nasıl yaz olduğu gösterir. Olay işlemcisi, bu olay hub'larından kalıcı denetim noktalarını ve paralel alımları yöneterek olay hub'larından olay almayı basitleştiriyor. Olay işlemcisi belirli bir olay Hub'ı ve bir tüketici grubu ile ilişkilendirildi. Olay hub'larında birden çok bölümden olayları alır ve bunları, sizin sağlaytığınız kod kullanılarak işleyici temsilcisine iletir.

Uyarı

Bu kodu üzerinde Azure Stack Hub, belirli bir API sürümünü hedeflemedikçe çalışma zamanı Depolama karşılarsınız. Bunun nedeni Event Hubs SDK'sı Azure'da bulunan ve Depolama platformda mevcut Azure Stack Hub api'sini kullanmasıdır. Azure Stack Hub Blob SDK'sı için azure Depolama da bulunanlardan farklı bir sürümünü destekleyebilirsiniz. Denetim noktası deposu olarak Azure Blob Depolama kullanıyorsanız, kodda bu sürümü derle ve hedefle Azure Stack Hub için desteklenen Azure Depolama API sürümünü kontrol edin.

Örneğin, Azure Stack Hub 2005'te çalışıyorsanız, Depolama hizmeti için kullanılabilir en yüksek sürüm 2019-02-02 sürümüdür. Varsayılan olarak, Event Hubs SDK istemci kitaplığı, Azure'da kullanılabilir en yüksek sürümü kullanır (SDK'nın yayımı tarihinde 2019-07-07). Bu durumda, bu bölümdeki adımların yanı sıra, Depolama hizmeti API'si 2019-02-02 sürümünü hedeflemek için de kod eklemeniz gerekir. Belirli bir API sürümünü hedeflemek için Depolama örnek için bkz.GitHub.

Azure Depolama blob kapsayıcısı oluşturma

Bu hızlı başlangıçta, denetim noktası deposu olarak Azure Depolama'i kullanırsiniz. Azure depolama hesabı oluşturmak için Depolama izleyin.

  1. Azure Depolama hesabı oluşturma

  2. Blob kapsayıcısı oluşturma

  3. Depolama hesabına bağlantı dizesini al

    Bağlantı dizesini ve kapsayıcı adını not edin. Bunları alma kodunda kullanacağız.

Alıcı için proje oluşturma

  1. Yeni Çözüm Gezgini EventHubQuickStart çözümüne sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Giriş'i Project.
  2. Konsol uygulaması'ı ve ardından Sonraki'yi seçin.
  3. Uygulama adı olarak EventHubsReceiver Project oluştur'a seçin.
  4. Yeni Çözüm Gezgini EventHubsReceiver'a sağ tıklayın ve Başlangıç olarak ayarla'yı Project.

Event Hubs NuGet paketini ekleme

  1. Menüden > Araçlar NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu'nu seçin.

  2. Paket Yöneticisi Konsolu penceresinde, Varsayılan proje için EventHubsReceiver'ın seçili olduğunu onaylayın. Yoksa, açılan listeyi kullanarak EventHubsReceiver öğesini seçin.

  3. Aşağıdaki komutu çalıştırarak Azure.Messaging.EventHubs NuGet yükleyin:

    Install-Package Azure.Messaging.EventHubs
    
  4. Aşağıdaki komutu çalıştırarak Azure.Messaging.EventHubs.Processor NuGet yükleyin:

    Install-Package Azure.Messaging.EventHubs.Processor
    

Main yöntemini güncelleştirme

  1. usingAşağıdaki deyimlerini Program.cs dosyasının en üstüne ekleyin.

    using System;
    using System.Text;
    using System.Threading.Tasks;
    using Azure.Storage.Blobs;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Consumer;
    using Azure.Messaging.EventHubs.Processor;
    
  2. Bağlantı dizesi ve Program olay hub'ı Event Hubs için sınıfına sabitler ekleyin. Köşeli ayraç içindeki yer tutucuları olay hub'larını oluştururken sahip olduğunuz uygun değerlerle değiştirin. Köşeli ayraç içindeki yer tutucuları olay hub'ı ve depolama hesabını (erişim anahtarları - birincil bağlantı dizesi) oluştururken sahip olduğunuz uygun değerlerle değiştirin. {Event Hubs namespace connection string} dizesinin olay hub'ı dizesi değil ad alanı düzeyi bağlantı dizesi olduğundan emin olun.

        private const string ehubNamespaceConnectionString = "<EVENT HUBS NAMESPACE - CONNECTION STRING>";
        private const string eventHubName = "<EVENT HUB NAME>";
        private const string blobStorageConnectionString = "<AZURE STORAGE CONNECTION STRING>";
        private const string blobContainerName = "<BLOB CONTAINER NAME>";
    
  3. Aşağıdaki statik özellikleri sınıfına Program ekleyin.

        static BlobContainerClient storageClient;
    
        // The Event Hubs client types are safe to cache and use as a singleton for the lifetime
        // of the application, which is best practice when events are being published or read regularly.        
        static EventProcessorClient processor;    
    
  4. yöntemini Main aşağıdaki yöntemle async Main değiştirin. Ayrıntılar için kod açıklamalarını görme.

        static async Task Main()
        {
            // Read from the default consumer group: $Default
            string consumerGroup = EventHubConsumerClient.DefaultConsumerGroupName;
    
            // Create a blob container client that the event processor will use 
            storageClient = new BlobContainerClient(blobStorageConnectionString, blobContainerName);
    
            // Create an event processor client to process events in the event hub
            processor = new EventProcessorClient(storageClient, consumerGroup, ehubNamespaceConnectionString, eventHubName);
    
            // Register handlers for processing events and handling errors
            processor.ProcessEventAsync += ProcessEventHandler;
            processor.ProcessErrorAsync += ProcessErrorHandler;
    
            // Start the processing
            await processor.StartProcessingAsync();
    
            // Wait for 30 seconds for the events to be processed
            await Task.Delay(TimeSpan.FromSeconds(30));
    
            // Stop the processing
            await processor.StopProcessingAsync();
        }
    
  5. Şimdi aşağıdaki olay ve hata işleyici yöntemlerini sınıfına ekleyin.

        static async Task ProcessEventHandler(ProcessEventArgs eventArgs)
        {
            // Write the body of the event to the console window
            Console.WriteLine("\tReceived event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray()));
    
            // Update checkpoint in the blob storage so that the app receives only new events the next time it's run
            await eventArgs.UpdateCheckpointAsync(eventArgs.CancellationToken);
        }
    
        static Task ProcessErrorHandler(ProcessErrorEventArgs eventArgs)
        {
            // Write details about the error to the console window
            Console.WriteLine($"\tPartition '{ eventArgs.PartitionId}': an unhandled exception was encountered. This was not expected to happen.");
            Console.WriteLine(eventArgs.Exception.Message);
            return Task.CompletedTask;
        }    
    
  6. Projeyi derleme ve hata yok olduğundan emin olun.

    Not

    Daha fazla bilgi açıklaması olan tam kaynak kodu için, dosyanın bu dosyasına GitHub.

  7. Alıcı uygulamasını çalıştırın.

  8. Olayların alınmıştır iletisi görüyor olun.

    Received event: Event 1
    Received event: Event 2
    Received event: Event 3    
    

    Bu olaylar, gönderen programını çalıştırarak, daha önce olay hub 'ına gönderdiğiniz üç olaydır.

Sonraki adımlar

GitHub örneklerine göz atın.