Azure Event Hubs Nedir?

Selamlar,

Bu makalede RabbitMQ’da ya da Redisde olduğu gibi publisher’dan subscriber’a olan, tek yönlü iletişim araçlarında Event Hubs’ı inceleyeceğiz. Event Hubs, ilgili datayı subscriberlarına büyük bir performance ile yayımlar. Ayrıca Kafka ile de entegrasyonu bulunmaktadır.Bu zaman kadar karşılaştığım, gerçek zamanlı veri alım araçlarından en performanslısı Event Hubs diyebilirim.

Azure Event Hubs “Partition Consumer Pattern” kullanmaktadır. Consumerlar datayı, birden fazla partition’dan okuyabilirler. Partitionlar, datayı fiziki bir storage’da günlerce tutabilirler. Yani Partition sayısı arttırıldığı zaman, buna bağlı olarak storage’ın da arttırılması gerekmektedir. Consumerlar da, datayı aldıkları noktayı tutarlar. Yani herhangi bir nedenden dolayı, partitionlardan data akışı kesilir ise, kaldıkları yerden devam edebilirler. Özellike IOT cihazlardan yüklüce veri akışında, Event Hubs çok başarılı çalışmaktadır.

Azure Üzerinde Event Hubs Oluşturma: 

  • Azure üzerinde menüden Create Resource seçildikten sonra “Event Hubs” seçilerek “Create” butonuna basılır.

  • Karşımıza aşağıdaki gibi bir ekran gelir. Event Hubs servisinin adı ve gurubu ve bölgesi seçilerek oluşturulur.

Events Hub’a erişim için gerekli olan Primary key ve Secondry key, aşağıdaki gibi alınır.

Şimdi Gelin bir Event Hub yaratalım:

Events Hub altından “+” tuşuna basılarak Event Hub yaratılır.

Aşağıdaki gibi bir ekran ile karşılaşılır. Create işleminden sonra artık Azure üzerinde Event Hub yaratılmış olunur.

Şimdi sıra geldi, örneğimize. “ExchangeEventHubs” adında bir Console Application aşağıdaki gibi yaratılır. Amaç değişen kur bilgilerini Consumerlar’a bildirmektir.

Nuget’den “WindowsAzure.ServiceBus” aşağıdaki gibi indirilir.

Aşağıda görüldüğü gibi Producer/Publisher 10 random kur değeri, consumer’a gönderilmektedir.

Şimdi sıra geldi, eğer sizde de yok ise Azure üzerinde “Storage” yaratmaya. Event Hubs üzerine gelen datayı, Azure üzerinde ya Table’da ya da Blob üzerinde tutmaktadır. Aşağıda görüldüğü gibi search ekranına “storage” yazılarak, “Storage account” seçilir.

Şimdi sıra geldi Storage Account’un yaratılması için gerekli alanların doldurulmasına. Aşağıda görüldüğü gibi account name olarak “exchangecontainer” atanmıştır.

Daha sonra ilgili storage’a erişim için “Acess keys” tıklandığında, aşağıdaki gibi “key1” ve “key2″‘ye erişilir. Bu keyler uygulamada, erişim için kullanılacaktır.

Sıra geldi Service Storage’dan “Blobs” Blob eklemeye: Aşağıda görüldüğü gibi Blobs sekmesi seçilir.

Ve Container “+” butonuna basılır. Bu uygulamada container ismi olarak “exchangehubcontainer” kullanılmıştır. Ve ilgili Blob Container’ı oluşturulur.

Şimdi sıra geldi gönderdiğimiz değerleri yakalamaya. Yani Consumer Application’ı yazmaya.

Yeni bir “EventHubConsumer” adından Console Application oluşturulur. Aşağıdaki kütüphaneler Nuget’den indirilir.

  • Microsoft.Azure.Eventhubs.
  • Microsoft.Azure.Eventhubs.Processor.

Processor: Tüm eventlerin dinlendiği, “IEventProcessor” interface’inden türeyen sınıftır. Process’in başlama, kapanma eventleri ve hata duruları nedenleri ile yakalanır. Ayrıca “ProcessEventsAsync” ile kendisine gönderilen data paketi ekrana basılır.

Şimdi sıra geldi, yukarıda tanımlı “Processor” sınıfının register edilip, gönderilecek paketlerin dinlenmesine.

En başta Azure üzerindeki Credential, Account ve Container isimleri aşağıdaki gibi tanımlanır:

  • EventHubConnectionString
  • EventHubName
  • StorageContainerName
  • StorageAccountName
  • StorageAccountKey
  • StorageConnectionString
  1. Asenkron bir MainAsync() methodu tanımlanmıştır.
  2. “EventProcessorHost()” : Azure üzerindeki EventProcessorHost credentiallar ile tanımlanır.
  3. “await eventProcessorHost.RegisterEventProcessorAsync<Processor>()”: Mesaj alma işlemini yapacak Consumer Processor sınıfı ile Register edilir.
    • Processor sınıfının ProcessEventsAsync() methodu ile gelen mesaj ekrana basılır.
    • Uygulama herhangi bir tuşa basılına kadar, dinleme modunda bırakılır.

MainAsync() methodu aşağıdaki gibi çağrılarak Consumer ayağa kaldırılır.

Bu makalede genelde Redis veya RabbitMQ ile yaptığım Pub/Sub işlemini bu sefer Event Hubs ile tecrübe ettim ve tek kelime ile performans canavarı olduğunu anladım. Azure üzerinde serverless olarak çalışan, anlık olarak veri almanız gereken durumlardan gözü kapalı tercih edilebilecek çözümlerden biridir.

Yeni bir makalede görüşmek üzere hoşçakalın.

Source Code : https://github.com/borakasmer/ExchangeNotifyEventhubs

Source :

  • https://docs.microsoft.com/tr-tr/azure/event-hubs/event-hubs-create
  • https://www.c-sharpcorner.com/blogs/azure-event-hub

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir