.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
Visual Studio 2019’u başlatın.
Yeni proje oluştur'a seçin.
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.
Programlama dili olarak C# öğesini seçin.
Uygulamanın türü olarak Konsol'ı seçin.
Sonuç listesinden Konsol Uygulaması'nu seçin.
Ardından, Sonraki'yi seçin.
Proje adı olarak EventHubsSender, çözüm adı olarak EventHubsQuickStart girin ve projeyi oluşturmak için Tamam'ı seçin.
Event Hubs NuGet paketini ekleme
Menüden > Araçlar NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu'nu seçin.
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
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;Bağlantı dizesi ve
Programolay 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.
Aşağıdaki statik özelliği sınıfına
Programekleyin. 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;yöntemini
Mainaşağıdaki yöntemleasync Maindeğ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(); } }Projeyi derleme ve hata yok olduğundan emin olun.
Programı çalıştırın ve onay iletiyi bekleyin.
A batch of 3 events has been published.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.
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.
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
- Yeni Çözüm Gezgini EventHubQuickStart çözümüne sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Giriş'i Project.
- Konsol uygulaması'ı ve ardından Sonraki'yi seçin.
- Uygulama adı olarak EventHubsReceiver Project oluştur'a seçin.
- Yeni Çözüm Gezgini EventHubsReceiver'a sağ tıklayın ve Başlangıç olarak ayarla'yı Project.
Event Hubs NuGet paketini ekleme
Menüden > Araçlar NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu'nu seçin.
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.
Aşağıdaki komutu çalıştırarak Azure.Messaging.EventHubs NuGet yükleyin:
Install-Package Azure.Messaging.EventHubsAş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
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;Bağlantı dizesi ve
Programolay 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>";Aşağıdaki statik özellikleri sınıfına
Programekleyin.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;yöntemini
Mainaşağıdaki yöntemleasync Maindeğ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(); }Ş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; }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.
Alıcı uygulamasını çalıştırın.
Olayların alınmıştır iletisi görüyor olun.
Received event: Event 1 Received event: Event 2 Received event: Event 3Bu 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.