Azure Service Bus’a Giriş

Emeltemakcay
riseconsulting
Published in
8 min readJul 18, 2023

By İbrahim Topal, M.Kürşat Yıldırım, Kadir Türkmen, Emre Topal, Erdem Çiçek

Bilgi çağında veri akışının hızla arttığı ve dağıtık sistemlerin daha yaygın hale geldiği günümüzde, güvenilir ve ölçeklenebilir bir iletişim altyapısının önemi giderek artmaktadır. İşte bu noktada Microsoft’un bulut bilişim platformu olan Azure, “Azure Service Bus”ı ön plana çıkarmaktadır. Geleneksel mesajlaşma sistemlerini aşan Azure Service Bus, modern işletmelerin ihtiyaçlarına uygun olarak tasarlanmıştır.

Özellikle mikroservis mimarilerinin benimsenmesiyle birlikte, dağıtık uygulamaların bir arada çalışabilmesi için güçlü bir mesajlaşma altyapısı gerekliliği doğmuştur. Azure Service Bus, bu boşluğu doldurarak uygulama ekosistemlerine uyum sağlar. Verilerin kesintisiz ve güvenilir bir şekilde akmasını sağlarken, altyapıyı büyük ölçekli projelerin gereksinimlerine uygun şekilde genişletir. Dijital çağda daha da karmaşık hale gelen uygulama ekosistemleri, Azure Service Bus sayesinde uyumlu bir şekilde iş birliği yapar, etkileşimde bulunur ve dönüşümü tetikler.

İşletmeler dijital dönüşümlerini sürdürdükçe, güvenli ve sürdürülebilir mesajlaşma hizmetlerine olan ihtiyaç da artmaya devam ediyor. Azure Service Bus, şirket içi çözümleri buluta bağlamak için kurumsal düzeyde mesajlaşma özellikleri sunan bulut tabanlı bir mesajlaşma hizmetidir. Bu makalede, özellikle Azure Service Bus’ın özelliklerini ve avantajlarını keşfedeceğiz ve demo uygulamalar ile mesaj gönderip bu mesajları çözümleyeceğiz.

1. Azure Service Bus Nedir?

Azure Service Bus, kurumsal mesajlaşma ve geçişli iletişim ile bulut özellikli iletişime olanak tanıyan, tam olarak yönetilen bir mesajlaşma hizmetidir. Mesajlar, JSON, XML veya düz metin gibi çeşitli formatlarda kodlanmış, yapılandırılmış veya yapılandırılmamış verileri içerebilir. Mesajlaşma servisi, uygulamaları ve servisleri birbirinden ayırmaya yardımcı olan bir ad alanında mesaj kuyrukları (queues) ve yayınlama-abone olma konuları (pub/sub topics) sunar.

2. Özellikleri

a. Birlikte çalışan servisler arasında yük dengeleme

Azure Service Bus, birlikte çalışan servislerin aynı anda bir kuyruktan mesaj okumasına olanak tanır ve her bir servisin kendine ait mesajları güvenli bir şekilde almasını sağlar. Bu özellik, iş yükünün servisler arasında dengeli bir şekilde dağıtılmasını sağlar ve trafik artışlarının bir hizmeti aşırı yüklemesini önler. Birden çok servis etkin olduğunda, Azure Service Bus, mesajların ilgili servislere özel sahipliğini sağlamak için sofistike bir kilitleme mekanizması kullanır. Bir servis başarıyla bir mesajın sahipliğini aldığında, bu mesaj belirli bir süre boyunca diğer rekabet eden servisler için görünmez hale gelir. Bu süre boyunca, çalışan diğer servislerden bağımsız olarak mesajı işleyebilir ve tamamlayabilir.

b. Hizmet ve uygulama sınırları boyunca verileri ve kontrolü güvenli bir şekilde yönlendirme ve aktarma

Azure Service Bus, hizmet ve uygulama sınırları arasında veri ve denetim aktarımı için güvenli ve güvenilir bir yol sağlar. Hizmet, mesajların güvenilir bir şekilde iletilmesini ve mesajların sırasının korunmasını sağlayarak iş açısından kritik senaryolar için idealdir.

c. Yüksek derecede güvenilirlik gerektiren operasyonları koordine etme

Azure Service Bus, yüksek derecede güvenilirlik gerektiren eşgüdümlü işlem çalışmasına olanak tanır. Bir kuyruktan mesaj alma, işlem sonuçlarını bir veya daha fazla farklı kuyruğa gönderme ve giriş mesajını orijinal sıradan taşıma gibi işlemlerin tümü atomik bir işlem kapsamında yapılabilir.

d. Yüksek performans

Azure Service Bus, çok sayıda iletiyi yüksek düzeyde yürütülebilir bir şekilde işlemek üzere tasarlanmıştır. Service, günde 30 milyar mesajı işleyebilir. Ayrıca, Azure Service Bus, dünyanın her yerinde kullanılabilir olduğundan, farklı bölgelerde faaliyet gösteren işletmeler için idealdir.

3. Azure Servis Bus Nasıl Çalışır

Azure Service Bus, uygulamaları ve hizmetleri birbirinden ayıran kuyruklar (queues) ve konular (topics) gibi mesajlaşma varlıkları sağlayarak çalışır. Mesajlar, bu varlıklar arasında aktarılır ve her mesaj, çeşitli formatlarda veri içeren meta verilerle oluşturulur.

a. Kuyruklar (Queues):

Kuyruklar, bir veya daha fazla tüketici servise (Consumer) İlk Giren İlk Çıkar (FIFO) mesajı teslimi sunar. Kuyruğa bir örnek, bir süpermarkette kasiyere ilk ulaşanın hizmet aldığı ve geri kalanların sırayla beklediği sıradır. Bu bağlamda tüketici (Consumer), mesajı işleyen uygulama anlamına gelir. Yayımcı (Publisher) ise, Azure Service Bus’a ileti gönderebilen herhangi bir uygulamadır. Yayıncılar, mesajları tüketiciler tarafından işlenme hızından farklı bir hızda (çoğunlukla daha yüksek) gönderebilirler.

b. Konular ve Abonelikler (Topics and Subscriptions):

Kuyruk kullanıldığında, bir mesaj yalnızca bir tüketici tarafından işlenebilir. Buna karşılık, konular ve abonelikler, yayıncı ile tüketici arasında birden çoğa ilişki sağlar. Yayıncılar bir konuya mesaj gönderebilir ve o konunun bağlantılı abonelikleri mesajın bir kopyasını oluşturur ve abone oldukları servise gönderir. Bu, birden fazla uygulamanın konudan aynı mesajı işlemesine izin verir. Öte yandan bir konu, her ayrı kuyruk için bir Service Bus oluşturmak yerine mesajlaşma kategorilerini ayırmak için harika bir araçtır. Buradaki mesajlar, abonelikler gerekli içerikleri kopyalayana kadar geçici olarak saklanır.

4. Örnek Uygulama

a. Servisin Kurulumu

Azure Service Bus ile oluşturabileceğiniz harika bir örnek uygulama, bir sipariş işleme uygulamasıdır. Bir müşteri sipariş verdiğinde, sipariş bilgilerini içeren yeni bir mesaj bir Azure Service Bus kuyruğuna gönderilir. Bir tüketici uygulaması bu mesajı aldığında, onu kuyrukta kilitler ve tüketici uygulaması siparişi alıp işledikten sonra bu mesaj kuyruktan silinmek üzere işaretlenir. Bu şekilde bir örneği oluşturmak için öncelikle Azure Portal üzerinde bir başlangıç ayarları ile bir Azure Servis Bus kaynağı ve kuyruk yapısı oluşturalım. “Service Bus” kelimeleri ile Azure kaynağının yönetim sayfalarına ulaşabilirsiniz. “Create” linki ile kaynağı oluşturabileceğiniz forma erişirsiniz.

Bu formda demo amaçlı kurulum ayarlarını tanımladıktan sonra diğer ayarları başlangıç değerlerinde bırakarak azure kaynağını belirttiğiniz kaynak grubu altında oluşturabilirsiniz. Deployment işlemi tamamlandıktan sonra kaynağınızın yönetim sayfasına ulaşabilirsiniz.

Service Bus kaynağınının ana sayfasında, servise ulaşan istek ve mesaj sayıları hakkında özet bilgiler görebileceğiniz gibi, solda açılan menüden kaynak ayarları yapabilirsiniz. Biz öncelikle postman ve consumer uygulamamız ile göndereceğimiz mesajların yönetileceği bir kuyruk yapacağız. Bunun için altta bulunan görseldeki kırmızı kutuda gösterilen Entities->Queues formunda yeni bir kuyruk oluşturacağız. Kuyruğa “risequeue” adını verip default ayarlar ile oluşturacağız.

Oluşan kuyruk kaynağının ana ekranında bu kuyruğa ilişkin istatistikleri ve kuyruğun URL bilgisini görebilirsiniz. Daha sonra bu kuyruğa postman’den ve producer uygulamamızdan mesaj gönderebilmek için gerekli erişim bilgilerini yönetmek için, sol menüde yer alan “Shared access policies” bağlantısınndan, bu kuyruğa özel token üretebilirsiniz.

Üretilen SAS Policy detaylarında, birincil ve ikincil “key”’ler ile birincil ve ikincil “connection string”’leri bulabilirsiniz. Bu makalenin devamında sunulacak olan demo app’lerde ve postman ayarlarında alttaki görselde görünen key ve connection string’ler kullanılacaktır.

b. Postman ile kuyruğa mesaj gönderimi.

İlk olarak postman ile Azure Service Bus Rest Endpoint ile mesaj gönderimi sağlayalım. Bunun için Postman uygulamanızda “import” diyerek alttaki Curl komutu ile request ayarlarını oluşturabilirsiniz.

curl --location --request POST '{{topicQueueForAzureServiceBusUri}}' \
--header 'ContentType: application/atom+xml;type=entry;charset=utf-8' \
--header 'Authorization: {{SasTokenForAzureServiceBus}}' \
--header 'Content-Type: application/json' \
--data-raw '{"YOUR JSON"}'

Daha sonra oluşturduğunuz request’in Pre-Request Script bölümüne altta yer alan kodları ekleyerek ilk 4 satırda geçen değişkenlere kendi oluşturduğunuz Azure Service Bus ve kuyruk bilgilerini tanımlamalısınız. İsteğin body kısmında göndermek istediğiniz json ya da xml’i yazabilirsiniz.

var namespace = "riseservicebusdemo";
var topicQueueName = “risequeue";
var sharedAccessKeyName = "risedemosas";
var sharedAccessKey = "58gS………….=”; //Primary Key

var topicQueueForAzureServiceBusUri = "https://" + namespace + ".servicebus.windows.net/" + topicQueueName + "/messages";
pm.collectionVariables.set("topicQueueForAzureServiceBusUri", topicQueueForAzureServiceBusUri);
var sasToken = createSharedAccessToken(topicQueueForAzureServiceBusUri, sharedAccessKeyName, sharedAccessKey);
pm.collectionVariables.set("SasTokenForAzureServiceBus", sasToken);

function createSharedAccessToken(uri, saName, saKey) {
if (!uri || !saName || !saKey) {
throw "Missing required parameter";
}
var encoded = encodeURIComponent(uri).toLowerCase();
var now = new Date();
var week = 60*60*24*7;
var ttl = Math.round(now.getTime() / 1000) + week;
var signature = encoded + '\n' + ttl;
var hash = CryptoJS.HmacSHA256(signature, saKey);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
return 'SharedAccessSignature sr=' + encoded + '&sig=' +
encodeURIComponent(hashInBase64) + '&se=' + ttl + '&skn=' + saName;
}

Bu bilgileri oluşturup kaydettikten sonra, isteği gönderdiğinizde Azure Service Bus’a rest endpoint üzerinden ilk mesajınızı iletmiş olacaksınız. Bu mesajı isterseniz Azure portal üzerinden inceleyebilirsiniz. Bunun için kuyruk yönetim sayfasındaki “Service Bus Explorer” sayfasını incelemeniz yeterli olacaktır.

c. Kuyruğa mesaj ileten console uygulaması.

Şimdi postman ile yaptığımız rest endpoint ile kuyruğa mesaj iletim işlemini, bir .net console uygulaması ile web socket alt yapısını kullanarak iletelim. Bunun için oluşturacağınız console uygulamasına “Azure.Messaging.ServiceBus” nuget paketini kurmanız gerekiyor. Azure portaldan edineceğiniz connection string ve kuyruk adı ile kodunuzu tamamlayabilirsiniz.

d. Kuyruktan mesaj okuyan console uygulaması

Hem postman hem de console uygulaması ile kuyruğa yazdığımız mesajları, consumer bir console uygulaması ile kuyruktan alarak ekrana basalım. Bunun için yine “Azure.Messaging.ServiceBus” nuget paketini kurmanız gerekiyor. Connection string ve kuyruk bilgisini sağladıktan sonra, projeyi çalıştırdığınızda bir önceki adımda eklenen mesajların baştan sona doğru kuyruktan okunarak ekrana basıldığını göreceksiniz.

5. Kullanım Örnekleri

Azure Service Bus, geniş bir kullanım yelpazesine sahip olup, ölçeklenebilirlik, güvenilirlik ve performans gibi özellikleri nedeniyle birçok farklı senaryoda kullanılabilir. İşte bu senaryolardan bazıları:

- Büyük veri analitiği: Azure Service Bus, geniş ölçekte veriyi hızlı ve etkin bir şekilde işlemeyi gerektirir. Bu durumlar için Azure Service Bus idealdir çünkü hızlı ve etkin bir şekilde yüksek hacimli veriyi işleyebilir.

- Mikroservisler: Mikroservisler genellikle birbiriyle iletişim kurmak için bir mesajlaşma sistemi gerektirir. Azure Service Bus, bu tür durumlar için mükemmeldir çünkü hızlı, güvenilir ve esnek bir şekilde iletişim sağlar.

- E-Ticaret uygulamaları: Azure Service Bus, yüksek talepli dönemlerde bile verimli bir şekilde çalışabilen güçlü ve ölçeklenebilir bir altyapı sağlar.

- Olay Tabanlı Mimaride(Event-Driven Architecture): Olay tabanlı mimariler, uygulamaların olayları ürettiği ve tükettiği bir yapıdır. Azure Service Bus, olayların dağıtılmasını ve tüketicilere teslimini kolaylaştırır. Böylece, olaylara dayalı esnek ve ölçeklenebilir uygulamalar geliştirmek mümkün olur.

- Uygulamalar Arası Entegrasyon: Farklı uygulamaların birbiriyle iletişim kurması gereken durumlarda Azure Service Bus kullanılabilir. Verilerin ve mesajların güvenli bir şekilde alışverişini sağlayarak, uygulamaların veri senkronizasyonu ve entegrasyonunu kolaylaştırır.

- Süreç Otomasyonunda: İş akışı ve süreç otomasyonu gerektiren senaryolarda da Azure Service Bus kullanılabilir. Farklı iş adımlarının ve bileşenlerinin birbiriyle iletişim kurmasını sağlar, böylece iş süreçlerini daha verimli hale getirir. Örnek olarak; bir kullanıcısı sisteme kayıt olduğunda hoşgeldin maili atılması istenir. Kullanıcı kaydı olduğunda mail gönderme servisinin dinlemiş olduğu kuyruğa mesaj bırakılır. Mail servisi kuyruğu dinleyerek mail gönderim işlemini gerçekleştirir. Bu sayede kayıt işlemi tamamlandıktan sonra mail gönderme işleminin tamamlanmasını beklemeden işlemlere devam edebilir.

Sonuç olarak, Azure Service Bus, uygulamalar arası iletişimi sağlamak ve geniş ölçekte veriyi hızlı ve güvenli bir şekilde işlemek için mükemmel bir seçenektir. .NET ile kullanımı kolay ve basit olan bu servis, geniş ölçekli uygulamaların ve hizmetlerin taleplerini karşılamak üzere tasarlanmıştır.

Bu yazı Rise Teknoloji “404-Team Name Not Found” takımı tarafından hazırlanmıştır.

--

--