Azure Event Hubs için .NET Programlama kılavuzu (eski Microsoft.Azure.EventHubs paketi)

Bu makalede, kod yazma ile ilgili bazı yaygın senaryolar ele Azure Event Hubs. Burada Event Hubs’ın önceden bilindiği varsayılır. Event Hubs’a kavramsal genel bakış için bkz. Event Hubs’a genel bakış.

Uyarı

Bu kılavuz, eski Microsoft.Azure.EventHubs paketine göredir. Kodunuzu en son Azure.Messaging.EventHubs paketini kullanmak üzere geçirmenizi öneririz.

Olay yayımcıları

Http POST kullanarak veya AMQP 1.0 bağlantısı aracılığıyla olayları bir olay hub' a gönderirsiniz. Hangi seçimin ne zaman ve ne zaman ele alınarak ele alınarak belirli bir senaryoya bağlı olduğu. AMQP 1.0 bağlantıları Service Bus içinde aracılı bağlantılar olarak ölçülür ve sıklıkla daha yüksek ileti hacimlerine ve düşük gecikme gereksinimlerine sahip senaryolar kalıcı bir mesajlaşma kanalı sağladığından bu senaryolarda daha uygundur.

.NET ile yönetilen API’ler kullanılırken Event Hubs’a veri yayımlamaya yönelik birincil yapılar EventHubClient ve EventData sınıflarıdır. [EventHubClient,][] olayların olay hub' a gönderildiği AMQP iletişim kanalını sağlar. [EventData sınıfı][] bir olayı temsil eder ve bir olay hub'ını iletileri yayımlamak için kullanılır. Bu sınıf gövdeyi, olayla ilgili bazı meta verileri(Özellikler) ve üst bilgi bilgilerini (SystemProperties) içerir. EventData nesnesi bir [olay][] hub'ı üzerinden geçerken diğer özellikler eklenir.

başlarken

Microsoft.Azure.EventHubs Event Hubs destekleyen .NET sınıfları NuGet sağlanır. Visual Studio Çözüm gezginini veya Paket Yöneticisi Konsolu'nu kullanarak Visual Studio. Bunu yapmak için Paket Yöneticisi Konsolu penceresinde aşağıdaki komutu yürütün:

Install-Package Microsoft.Azure.EventHubs

Olay hub’ı oluşturma

Azure portal, Azure PowerShell veya Azure CLI'sini kullanarak Event Hubs. Ayrıntılar için bkz. Event Hubs kullanarak bir ad alanı ve olay hub'ı Azure portal.

Event Hubs istemcisi oluşturma

Event Hubs için birincil sınıf [Microsoft.Azure.EventHubs.EventHubClient][EventHubClient'dır.] Aşağıdaki örnekte gösterildiği gibi CreateFromConnectionString yöntemini kullanarak bu sınıfın örneğini oluşturabilirsiniz:

private const string EventHubConnectionString = "Event Hubs namespace connection string";
private const string EventHubName = "event hub name";

var connectionStringBuilder = new EventHubsConnectionStringBuilder(EventHubConnectionString)
{
    EntityPath = EventHubName

};
eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());

Olayları bir olay hub'a gönderme

Bir EventHubClient örneği oluşturarak ve SendAsync yöntemi aracılığıyla zaman uyumsuz olarak göndererek olayları bir olay hub'ine gönderirsiniz. Bu yöntem tek bir EventData örneği parametresini alır ve zaman uyumsuz olarak bir olay hub' a gönderir.

Olayı seri hale getirme

[EventData sınıfının,][] olay veri yükünü temsil eden çeşitli parametreler, baytlar veya bayt dizisi alan iki aşırı yüklenmiş oluşturucusu vardır. JSON’u EventData ile kullanırken JSON ile kodlanmış bir dize için bayt dizisini almak üzere Encoding.UTF8.GetBytes() kullanabilirsiniz. Örnek:

for (var i = 0; i < numMessagesToSend; i++)
{
    var message = $"Message {i}";
    Console.WriteLine($"Sending message: {message}");
    await eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
}

Bölüm anahtarı

Not

Bölümler hakkında bilgi sahibi değilsanız bu makaleye bakın.

Olay verilerini gönderirken, bölüm ataması oluşturmak için karma bir değer belirtebilirsiniz. Bölümü PartitionSender.PartitionID özelliğini kullanarak belirtirsiniz. Ancak, bölümleri kullanma kararı, kullanılabilirlik ve tutarlılık arasında bir seçim anlamına gelir. Daha fazla bilgi için bkz. Kullanılabilirlik ve Tutarlılık.

Toplu olay gönderme işlemleri

Olayları toplu olarak göndermek aktarım hızını artırmaya yardımcı olabilir. CreateBatch API'sini kullanarak daha sonra SendAsync çağrısı için veri nesnelerinin eklk bir toplu iş oluşturabilirsiniz.

Tek bir toplu iş, bir olayın 1 MB sınırını aşmaz. Ayrıca, toplu işteki her bir ileti aynı yayımcı kimliğini kullanır. Toplu işin en büyük olay boyutu aşmamasını sağlamak gönderenin sorumluluğundadır. Aşması durumunda bir istemci Gönderme hatası oluşturulur. Toplu iş 1 MB'ı aşmaması için EventHubClient.CreateBatch yardımcı yöntemini kullanabilirsiniz. CreateBatch API'sinde boş bir EventDataBatch elde edin ve ardından tryAdd kullanarak toplu işi oluşturmak için olaylar ekleyin.

Zaman uyumsuz olarak gönderme ve ölçekli gönderme

Olayları bir olay hub' a zaman uyumsuz olarak gönderirsiniz. Zaman uyumsuz gönderme, istemcinin olayları gönderelik oranını artırır. SendAsync bir Görev nesnesi döndürür. İstemci yeniden deneme seçeneklerini kontrol etmek için istemcide RetryPolicy sınıfını kullanabilirsiniz.

Olay tüketicileri

EventProcessorHost sınıfı Event Hubs verilerini işler. .NET platformu üzerinde olay okuyucuları oluştururken bu uygulamayı kullanmanız gerekir. EventProcessorHost aynı zamanda denetim noktası oluşturma ve bölüm kiralama yönetimi sağlayan olay işlemcisi uygulamaları için iş parçacığı güvenli, çok işlemli, güvenli bir çalışma zamanı ortamı sağlar.

EventProcessorHost sınıfını kullanmak için IEventProcessor uygulayabilirsiniz. Bu arabirim dört yöntem içerir:

Olay işlemeyi başlatmak için event hub'ınız için uygun parametreleri sağlayarak EventProcessorHostörneğini başlatabilirsiniz. Örnek:

var eventProcessorHost = new EventProcessorHost(
        EventHubName,
        PartitionReceiver.DefaultConsumerGroupName,
        EventHubConnectionString,
        StorageConnectionString,
        StorageContainerName);

Ardından, IEventProcessor uygulamanızı çalışma zamanıyla kaydetmek için RegisterEventProcessorAsync'i arayın:

await eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>();

Bu noktada konak, "doyumsuz" bir algoritma kullanarak olay hub'ı içinde her bölümde kiralama elde etmek için çalışır. Bu kiralar, verilen zaman çerçevesi için en son olur ve daha sonra yenilenmesi gerekir. Bu örnekte çalışan örnekleri olan yeni düğümler çevrimiçi oldukça kiralama ayırmaları yapar ve zaman içerisinde yük daha fazla kira elde etmeye çalıştığından düğümler arasında kayar.

Olay İşleyicisi Konağı

Zaman içerisinde bir denge sağlanır. Bu dinamik özellik hem ölçek artırma hem de ölçek azaltma için tüketicilere CPU tabanlı otomatik ölçeklendirmenin uygulanmasını sağlar. Bu Event Hubs doğrudan ileti sayısı kavramına sahip olmadığınız için ortalama CPU kullanımı genellikle arka uç veya tüketici ölçeğini ölçmeye yönelik en iyi mekanizmadır. Yayımcılar tüketicilerin işleyebileceğinden daha fazla olay yayımlamaya başlarsa, tüketiciler üzerindeki CPU artışı çalışan örnek sayısı üzerinde otomatik ölçeklendirmeye neden olmak için kullanılabilir.

EventProcessorHost sınıfı ayrıca bir Azure depolama tabanlı denetim noktası oluşturma mekanizması kullanır. Bu mekanizma uzaklığı bölüm başına temelinde depolar, böylece her tüketici önceki tüketicinin son denetim noktasının ne olduğunu belirleyebilir. Bölümler kiralamalar aracılığıyla düğümler arasında geçiş yaptığında yük kaymasını kolaylaştıran eşitleme mekanizması budur.

Yayımcı iptali

Olay İşlemcisi Ana Bilgisayarı'nın gelişmiş çalışma zamanı özelliklerine ek olarak, Event Hubs hizmeti belirli yayımcıların olay hub' a olay göndermesini engellemek için yayımcı iptali sağlar. Bu özellikler, bir yayımcı belirtecin güvenliği tehlikeye atılmışsa veya bir yazılım güncelleştirmesi uygunsuz şekilde davranmalarına neden oluyorsa yararlıdır. Bu durumlarda SAS belirtecinin bir parçası olan yayımcı kimliğinin olayları yayımlaması engellenebilir.

Not

Şu anda yalnızca REST API özelliği (yayımcıiptali) destekler.

Sonraki adımlar

Event Hubs senaryoları hakkında daha fazla bilgi almak için aşağıdaki bağlantıları ziyaret edin: