Hızlı Başlangıç: .NET kullanarak Azure Event Hubs'a olay gönderme ve olay alma

Bu hızlı başlangıçta, Azure.Messaging.EventHubs .NET kitaplığını kullanarak olay hub'ına olay göndermeyi ve ardından bu olayları olay hub'ından almayı öğreneceksiniz.

Not

Hızlı başlangıçlar, hizmeti hızla artırmanıza yöneliktir. Hizmeti zaten biliyorsanız, GitHub'daki .NET SDK depomuzda Event Hubs için .NET örneklerini görmek isteyebilirsiniz: GitHub'da Event Hubs örnekleri, GitHub'da olay işlemcisi örnekleri.

Önkoşullar

Azure Event Hubs'da yeniyseniz bu hızlı başlangıcı gerçekleştirmeden önce bkz . Event Hubs'a genel bakış .

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

  • Microsoft Azure aboneliği. Azure Event Hubs da dahil olmak üzere Azure hizmetlerini kullanmak için bir aboneliğe ihtiyacınız vardır. Mevcut bir Azure hesabınız yoksa ücretsiz deneme sürümüne kaydolabilir veya hesap oluştururken MSDN abone avantajlarınızı kullanabilirsiniz.
  • Microsoft Visual Studio 2022. Azure Event Hubs istemci kitaplığı, C# 8.0'da kullanıma sunulan yeni özellikleri kullanır. Kitaplığı önceki C# dil sürümleriyle kullanmaya devam edebilirsiniz, ancak yeni söz dizimi kullanılamaz. Tam söz dizimini kullanmak için .NET Core SDK 3.0 veya üzeri ile derlemenizi ve dil sürümünü olarak latestayarlamanızı öneririz. Visual Studio kullanıyorsanız, Visual Studio 2022 öncesi sürümler C# 8.0 projeleri oluşturmak için gereken araçlarla uyumlu değildir. Ücretsiz Community sürümü de dahil olmak üzere Visual Studio 2022 buradan indirilebilir.
  • Event Hubs ad alanı ve olay hub'ı oluşturun. İlk adım, Azure portalını kullanarak ad alanında bir Event Hubs ad alanı ve olay hub'ı oluşturmaktır. Ardından, uygulamanızın olay hub'ı ile iletişim kurması için gereken yönetim kimlik bilgilerini alın. Ad alanı ve olay hub'ı oluşturmak için bkz . Hızlı Başlangıç: Azure portalını kullanarak olay hub'ı oluşturma.

Azure'da uygulamanın kimliğini doğrulama

Bu hızlı başlangıç, Azure Event Hubs'a bağlanmanın iki yolunu gösterir:

  • Parolasız (Microsoft Entra kimlik doğrulaması)
  • Connection string

İlk seçenek, Bir Event Hubs ad alanına bağlanmak için Azure Active Directory'de güvenlik sorumlunuzu ve rol tabanlı erişim denetimini (RBAC) nasıl kullanacağınızı gösterir. Kodunuzda, yapılandırma dosyasında veya Azure Key Vault gibi güvenli bir depolama alanında sabit kodlanmış bağlantı dizesi olması konusunda endişelenmeniz gerekmez.

İkinci seçenek, Event Hubs ad alanına bağlanmak için bir bağlantı dizesi nasıl kullanacağınızı gösterir. Azure'da yeniyseniz bağlantı dizesi seçeneğini daha kolay takip edebilirsiniz. Gerçek dünyadaki uygulamalarda ve üretim ortamlarında parolasız seçeneği kullanmanızı öneririz. Daha fazla bilgi için bkz . Kimlik doğrulaması ve yetkilendirme. Ayrıca, genel bakış sayfasında parolasız kimlik doğrulaması hakkında daha fazla bilgi edinebilirsiniz.

Microsoft Entra kullanıcınıza rol atama

Yerel olarak geliştirme yaparken, Azure Event Hubs'a bağlanan kullanıcı hesabının doğru izinlere sahip olduğundan emin olun. İleti gönderip almak için Azure Event Hubs Veri Sahibi rolüne ihtiyacınız vardır. Kendinize bu rolü atamak için Kullanıcı Erişimi Yönetici istrator rolüne veya eylemi içeren Microsoft.Authorization/roleAssignments/write başka bir role ihtiyacınız olacaktır. Azure portalı, Azure CLI veya Azure PowerShell'i kullanarak kullanıcıya Azure RBAC rolleri atayabilirsiniz. Kapsam genel bakış sayfasında rol atamaları için kullanılabilir kapsamlar hakkında daha fazla bilgi edinin.

Aşağıdaki örnekte rol, Azure Event Hubs kaynaklarına tam erişim sağlayan kullanıcı hesabınıza atanır Azure Event Hubs Data Owner . Gerçek bir senaryoda, kullanıcılara yalnızca daha güvenli bir üretim ortamı için gereken minimum izinleri vermek için En Az Ayrıcalık İlkesi'ni izleyin.

Azure Event Hubs için Azure yerleşik rolleri

Azure Event Hubs için, Azure portalı ve Azure kaynak yönetimi API'sini kullanarak ad alanlarının ve tüm ilgili kaynakların yönetimi Azure RBAC modeli kullanılarak zaten korunur. Azure, Event Hubs ad alanına erişim yetkisi vermek için aşağıdaki Azure yerleşik rollerini sağlar:

Özel bir rol oluşturmak istiyorsanız bkz . Event Hubs işlemleri için gereken haklar.

Önemli

Çoğu durumda rol atamasının Azure'a yayılması bir veya iki dakika sürer. Nadir durumlarda, sekiz dakikaya kadar sürebilir. Kodunuzu ilk kez çalıştırdığınızda kimlik doğrulama hataları alıyorsanız, birkaç dakika bekleyin ve yeniden deneyin.

  1. Azure portalında ana arama çubuğunu veya sol gezintiyi kullanarak Event Hubs ad alanınızı bulun.

  2. Genel bakış sayfasında, sol taraftaki menüden Erişim denetimi (IAM) öğesini seçin.

  3. Erişim denetimi (IAM) sayfasında Rol atamaları sekmesini seçin.

  4. Üst menüden + Ekle'yi seçin ve ardından açılan menüden Rol ataması ekle'yi seçin.

    Rol atamayı gösteren ekran görüntüsü.

  5. Sonuçları istenen role göre filtrelemek için arama kutusunu kullanın. Bu örnek için eşleşen sonucu arayın Azure Event Hubs Data Owner ve seçin. Ardından İleri'yi seçin.

  6. Erişim ata'nın altında Kullanıcı, grup veya hizmet sorumlusu'na tıklayın ve ardından + Üye seç'e tıklayın.

  7. İletişim kutusunda Microsoft Entra kullanıcı adınızı (genellikle user@domain e-posta adresiniz) arayın ve iletişim kutusunun alt kısmındaki Seç'i seçin.

  8. Son sayfaya gitmek için Gözden geçir + ata'yı seçin ve ardından işlemi tamamlamak için Gözden geçir + yeniden ata'yı seçin.

Visual Studio'yu başlatma ve Azure'da oturum açma

Aşağıdaki adımları kullanarak service bus ad alanına erişim yetkisi vekleyebilirsiniz:

  1. Visual Studio’yu başlatın. Başlarken penceresini görüyorsanız, sağ bölmedeki Kod olmadan devam et bağlantısını seçin.

  2. Visual Studio'nun sağ üst kısmındaki Oturum aç düğmesini seçin.

    Visual Studio kullanarak Azure'da oturum açmak için bir düğmeyi gösteren ekran görüntüsü.

  3. Daha önce bir rol atadığınız Microsoft Entra hesabını kullanarak oturum açın.

    Hesap seçimini gösteren ekran görüntüsü.

Olayları olay hub'ına gönderme

Bu bölümde, oluşturduğunuz olay hub'ına olay göndermek için bir .NET Core konsol uygulamasının nasıl oluşturulacağı gösterilir.

Konsol uygulaması oluşturma

  1. Visual Studio 2022 zaten açıksa, menüden Dosya'yı seçin, Yeni'yi ve ardından Proje'yi seçin. Aksi takdirde, Visual Studio 2022'yi başlatın ve açılan pencere görürseniz Yeni proje oluştur'u seçin.

  2. Yeni proje oluştur iletişim kutusunda aşağıdaki adımları uygulayın: Bu iletişim kutusunu görmüyorsanız, menüden Dosya'yı seçin, Yeni'yi ve ardından Proje'yi seçin.

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

    2. Uygulamanın türü için Konsol'a tıklayın.

    3. Sonuçlar listesinden Konsol Uygulaması'nı seçin.

    4. Ardından İleri'yi seçin.

      Yeni Proje iletişim kutusunu gösteren resim

  3. Proje adı olarak EventHubsSender, çözüm adı için EventHubsQuickStart yazın ve İleri'yi seçin.

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

  4. Ek bilgiler sayfasında Oluştur'u seçin.

NuGet paketlerini projeye ekleme

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

  2. Azure.Messaging.EventHubs ve Azure.Identity NuGet paketlerini yüklemek için aşağıdaki komutları çalıştırın. İkinci komutu çalıştırmak için ENTER tuşuna basın.

    Install-Package Azure.Messaging.EventHubs
    Install-Package Azure.Identity
    

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

  1. Dosyadaki Program.cs mevcut kodu aşağıdaki örnek kodla değiştirin. Ardından, parametrelerin EventHubProducerClient ve <HUB_NAME> yer tutucu değerlerini Event Hubs ad alanınızın ve olay hub'ınızın adlarıyla değiştirin<EVENT_HUB_NAMESPACE>. Örneğin: "spehubns0309.servicebus.windows.net" ve "spehub".

    Koddaki önemli adımlar şunlardır:

    1. Ad alanını ve olay hub'ı adını kullanarak bir EventHubProducerClient nesnesi oluşturur.
    2. EventDataBatch nesnesi oluşturmak için EventHubProducerClient nesnesinde CreateBatchAsync yöntemini çağırır.
    3. EventDataBatch.TryAdd yöntemini kullanarak toplu işleme olay ekleyin.
    4. EventHubProducerClient.SendAsync yöntemini kullanarak toplu iletileri olay hub'ına gönderir.
    using Azure.Identity;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Producer;
    using System.Text;
    
    // number of events to be sent to the event hub
    int numOfEvents = 3;
    
    // 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.
    // TODO: Replace the <EVENT_HUB_NAMESPACE> and <HUB_NAME> placeholder values
    EventHubProducerClient producerClient = new EventHubProducerClient(
        "<EVENT_HUB_NAMESPACE>.servicebus.windows.net",
        "<HUB_NAME>",
        new DefaultAzureCredential());
    
    // 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.");
        Console.ReadLine();
    }
    finally
    {
        await producerClient.DisposeAsync();
    }
    
  1. Projeyi derleyin ve hata olmadığından emin olun.

  2. Programı çalıştırın ve onay iletisini bekleyin.

    A batch of 3 events has been published.
    

    Önemli

    Parolasız (Azure Active Directory'nin Rol Tabanlı Erişim Denetimi) kimlik doğrulamasını kullanıyorsanız Araçlar'ı ve ardından Seçenekler'i seçin. Seçenekler penceresinde Azure Hizmet Kimlik Doğrulaması'nı genişletin ve Hesap Seçimi'ni seçin. Event Hubs ad alanındaki Azure Event Hubs Veri Sahibi rolüne eklenen hesabı kullandığınızı onaylayın.

  3. Azure portalındaki Event Hubs Ad Alanı sayfasında İletiler grafiğinde üç gelen ileti görürsünüz. Gerekirse grafiği güncelleştirmek için sayfayı yenileyin. İletilerin alındığını göstermesi birkaç saniye sürebilir.

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

    Not

    Daha fazla bilgi açıklamaları içeren tam kaynak kodu için GitHub'da bu dosyaya bakın

Olay hub'ından olay alma

Bu bölümde, olay işlemcisi kullanarak bir olay hub'ından olay alan bir .NET Core konsol uygulamasının nasıl yazıldığını gösterir. Olay işlemcisi olay hub'larından olay almayı basitleştirir.

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

Bu hızlı başlangıçta denetim noktası deposu olarak Azure Depolama kullanacaksınız. Azure Depolama hesabı oluşturmak için bu adımları izleyin.

  1. Azure Depolama hesabı oluşturma
  2. Blob kapsayıcısı oluşturma
  3. Microsoft Entra Id (parolasız) kimlik doğrulamasını veya ad alanında bir bağlantı dizesi kullanarak blob kapsayıcısı için kimlik doğrulaması yapın.

Azure Blob Depolama denetim noktası deposu olarak kullanırken şu önerileri izleyin:

  • Her tüketici grubu için ayrı bir kapsayıcı kullanın. Aynı depolama hesabını kullanabilirsiniz, ancak her grup için bir kapsayıcı kullanabilirsiniz.
  • Kapsayıcıyı başka hiçbir şey için kullanmayın ve depolama hesabını başka hiçbir şey için kullanmayın.
  • Depolama hesabın dağıtılan uygulamanın bulunduğu bölgede olması gerekir. Uygulama şirket içindeyse, mümkün olan en yakın bölgeyi seçmeyi deneyin.

Azure portalındaki Depolama hesabı sayfasında, Blob hizmeti bölümünde aşağıdaki ayarların devre dışı bırakıldığından emin olun.

  • Hiyerarşik ad alanı
  • Blob geçici silme
  • Sürüm oluşturma

Yerel olarak geliştirme yaparken blob verilerine erişen kullanıcı hesabının doğru izinlere sahip olduğundan emin olun. Blob verilerini okumak ve yazmak için Depolama Blob Veri Katkıda Bulunanı gerekir. Kendinize bu rolü atamak için Kullanıcı Erişimi Yönetici istrator rolüne veya Microsoft.Authorization/roleAssignments/write eylemini içeren başka bir role atanmalısınız. Azure portalı, Azure CLI veya Azure PowerShell'i kullanarak kullanıcıya Azure RBAC rolleri atayabilirsiniz. Rol atamaları için kullanılabilir kapsamlar hakkında daha fazla bilgiyi kapsam genel bakış sayfasından öğrenebilirsiniz.

Bu senaryoda, En Az Ayrıcalık İlkesi'ni izlemek için depolama hesabı kapsamındaki kullanıcı hesabınıza izinler atayacaksınız. Bu uygulama kullanıcılara yalnızca gereken minimum izinleri verir ve daha güvenli üretim ortamları oluşturur.

Aşağıdaki örnek, depolama hesabınızdaki blob verilerine hem okuma hem de yazma erişimi sağlayan Depolama Blob Verileri Katkıda Bulunanı rolünü kullanıcı hesabınıza atar.

Önemli

Çoğu durumda rol atamasının Azure'a yayılması bir veya iki dakika sürer, ancak nadir durumlarda sekiz dakikaya kadar sürebilir. Kodunuzu ilk kez çalıştırdığınızda kimlik doğrulama hataları alıyorsanız, birkaç dakika bekleyin ve yeniden deneyin.

  1. Azure portalında ana arama çubuğunu veya sol gezintiyi kullanarak depolama hesabınızı bulun.

  2. Depolama hesabına genel bakış sayfasında sol taraftaki menüden Erişim denetimi (IAM) öğesini seçin.

  3. Erişim denetimi (IAM) sayfasında Rol atamaları sekmesini seçin.

  4. Üst menüden + Ekle'yi seçin ve ardından açılan menüden Rol ataması ekle'yi seçin.

    Depolama hesabı rolü atamayı gösteren ekran görüntüsü.

  5. Sonuçları istenen role göre filtrelemek için arama kutusunu kullanın. Bu örnek için Depolama Blob Veri Katkıda Bulunanı'nı arayın, eşleşen sonucu seçin ve ardından İleri'yi seçin.

  6. Erişim ata'nın altında Kullanıcı, grup veya hizmet sorumlusu'na tıklayın ve ardından + Üye seç'e tıklayın.

  7. İletişim kutusunda Microsoft Entra kullanıcı adınızı (genellikle user@domain e-posta adresiniz) arayın ve iletişim kutusunun alt kısmındaki Seç'i seçin.

  8. Son sayfaya gitmek için Gözden geçir + ata'yı seçin ve ardından işlemi tamamlamak için Gözden geçir + yeniden ata'yı seçin.

Alıcı için proje oluşturma

  1. Çözüm Gezgini penceresinde EventHubQuickStart çözümüne sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Proje'yi seçin.
  2. Konsol uygulaması'yı ve ardından İleri'yi seçin.
  3. Proje adı olarak EventHubsReceiver yazın ve Oluştur'u seçin.
  4. Çözüm Gezgini penceresinde EventHubsReceiver'a sağ tıklayın ve Başlangıç Projesi Olarak Ayarla'yı seçin.

NuGet paketlerini projeye ekleme

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

  2. Paket Yöneticisi Konsolu penceresinde EventHubsReceiver öğesinin Varsayılan proje için seçili olduğunu onaylayın. Aksi takdirde, EventHubsReceiver'ı seçmek için açılan listeyi kullanın.

  3. Azure.Messaging.EventHubs ve Azure.Identity NuGet paketlerini yüklemek için aşağıdaki komutu çalıştırın. Son komutu çalıştırmak için ENTER tuşuna basın.

    Install-Package Azure.Messaging.EventHubs
    Install-Package Azure.Messaging.EventHubs.Processor
    Install-Package Azure.Identity
    

Kodu güncelleştirme

Program.cs dosyasının içeriğini aşağıdaki kodla değiştirin:

  1. Dosyadaki Program.cs mevcut kodu aşağıdaki örnek kodla değiştirin. Ardından, URI için BlobContainerClient ve <BLOB_CONTAINER_NAME> yer tutucu değerlerini değiştirin<STORAGE_ACCOUNT_NAME>. <EVENT_HUB_NAMESPACE> için ve <HUB_NAME> yer tutucu değerlerini EventProcessorClient de değiştirin.

    Koddaki önemli adımlar şunlardır:

    1. Event Hubs ad alanını ve olay hub'ı adını kullanarak bir EventProcessorClient nesnesi oluşturur. Daha önce oluşturduğunuz Azure depolama alanında kapsayıcı için BlobContainerClient nesnesi oluşturmanız gerekir.
    2. EventProcessorClient nesnesinin ProcessEventAsync ve ProcessErrorAsync olayları için işleyicileri belirtir.
    3. EventProcessorClient nesnesinde StartProcessingAsync'i çağırarak olayları işlemeye başlar.
    4. EventProcessorClient nesnesinde StopProcessingAsync çağırarak 30 saniye sonra olayları işlemeyi durdurur.
    using Azure.Identity;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Consumer;
    using Azure.Messaging.EventHubs.Processor;
    using Azure.Storage.Blobs;
    using System.Text;
    
    // Create a blob container client that the event processor will use
    // TODO: Replace <STORAGE_ACCOUNT_NAME> and <BLOB_CONTATINAER_NAME> with actual names
    BlobContainerClient storageClient = new BlobContainerClient(
        new Uri("https://<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/<BLOB_CONTAINER_NAME>"),
        new DefaultAzureCredential());
    
    // Create an event processor client to process events in the event hub
    // TODO: Replace the <EVENT_HUBS_NAMESPACE> and <HUB_NAME> placeholder values
    var processor = new EventProcessorClient(
        storageClient,
        EventHubConsumerClient.DefaultConsumerGroupName,
        "<EVENT_HUB_NAMESPACE>.servicebus.windows.net",
        "<HUB_NAME>",
        new DefaultAzureCredential());
    
    // 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();
    
    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()));
        Console.ReadLine();
        return Task.CompletedTask;
    }
    
    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);
        Console.ReadLine();
        return Task.CompletedTask;
    }
    
  1. Projeyi derleyin ve hata olmadığından emin olun.

    Not

    Daha fazla bilgi açıklamaları içeren tam kaynak kodu için GitHub'da bu dosyaya bakın.

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

  3. Olayların alındığını belirten bir ileti görmeniz gerekir. Alınan olay iletisini gördükkten sonra ENTER tuşuna basın.

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

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

  4. Azure portalında, event hubs'ın alıcı uygulamaya gönderdiği üç giden ileti olduğunu doğrulayabilirsiniz. Grafiği güncelleştirmek için sayfayı yenileyin. İletilerin alındığını göstermesi birkaç saniye sürebilir.

    Olay hub'ının olayları alıcı uygulamaya gönderdiğini doğrulamak için Azure portal sayfasının görüntüsü

Event Hubs SDK tabanlı uygulamalar için şema doğrulaması

Event Hubs SDK tabanlı uygulamalarınızla veri akışı yaparken şema doğrulaması gerçekleştirmek için Azure Schema Registry'yi kullanabilirsiniz. Event Hubs'ın Azure Schema Registry'sinde şemaları yönetmek için merkezi bir depo sağlanır ve yeni veya mevcut uygulamalarınızı Schema Registry ile sorunsuz bir şekilde bağlayabilirsiniz.

Daha fazla bilgi edinmek için bkz . Event Hubs SDK ile şemaları doğrulama.

Örnekler ve başvuru

Bu hızlı başlangıç, bir olay hub'ına toplu olay gönderme ve ardından alma senaryolarını uygulamaya yönelik adım adım yönergeler sağlar. Daha fazla örnek için aşağıdaki bağlantıları seçin.

Tam .NET kitaplık başvurusu için SDK belgelerimize bakın.

Kaynakları temizleme

Event Hubs ad alanına sahip kaynak grubunu silin veya kaynak grubunu korumak istiyorsanız yalnızca ad alanını silin.

Aşağıdaki öğreticiye bakın: