Aracılığıyla paylaş


Service Bus kuyrukları, konu başlıkları ve abonelikleri

Azure Service Bus güvenilir ileti kuyruğa alma ve dayanıklı yayımlama/abone olma mesajlaşmasını destekler. Service Bus'taki mesajlaşma özelliklerinin temelini oluşturan mesajlaşma varlıkları kuyruklar, konular ve aboneliklerdir.

Önemli

Azure Service Bus'ı yeni kullanıyorsanız bu makaleye geçmeden önce Azure Service Bus nedir? makalesini okuyun.

Kuyruklar

Kuyruklar, bir veya birden çok rakip tüketiciye İlk Giren İlk Çıkar (FIFO) yöntemine göre ileti teslimi sunar. Yani, alıcılar genellikle iletileri kuyruğa eklendikleri sırayla alır ve işler. Ayrıca, tüketici her iletiyi yalnızca bir ileti alır ve işler.

Hizmet Kuyruklarının nasıl çalıştığını gösteren resim.

Kuyrukları kullanmanın temel avantajlarından biri, uygulama bileşenlerinin zamansal ayrıştırmasını sağlamaktır. Başka bir deyişle, iletiler kuyrukta sabit bir şekilde depolandığından, üreticiler (gönderenler) ve tüketiciler (alıcılar) aynı anda ileti göndermek ve almak zorunda değildir. Ayrıca, üreticinin iletileri işlemeye ve göndermeye devam etmesi için tüketiciden bir yanıt beklemesi gerekmez.

İlgili bir avantaj, üreticilerin ve tüketicilerin farklı oranlarda ileti gönderip almasını sağlayan yük dengelemedir. Birçok uygulamada sistem yükü zaman içinde değişir. Ancak, her çalışma birimi için gereken işleme süresi genellikle sabittir. İleti üreticilerinin ve tüketicilerinin kuyrukla aracılık edilmesi, tüketen uygulamanın en yüksek yük yerine yalnızca ortalama yükü işleyebilmesi anlamına gelir. Gelen yük hacmi değiştikçe kuyruğun derinliği artar ve daralır. Bu özellik, uygulama yüküne hizmet vermek için gereken altyapı miktarıyla ilgili olarak doğrudan tasarruf sağlar. Yük arttıkça kuyruktan okumak için daha fazla çalışan işlemi eklenebilir. Her ileti yalnızca bir çalışan işlemi tarafından işlenir. Ayrıca, bu çekme tabanlı yük dengeleme, güç çekme iletilerini kendi maksimum hızlarında işleyen çalışan bilgisayarlar bile çalışan bilgisayarların en iyi şekilde kullanılmasını sağlar. Bu düzen, genelde rakip tüketici düzeni olarak adlandırılır.

İleti üreticileri ile tüketiciler arasında ara geçiş yapmak için kuyrukların kullanılması, bileşenler arasında doğal bir gevşek bağlantı sağlar. Üreticiler ve tüketiciler birbirinin farkında olmadığından, tüketici üretici üzerinde herhangi bir etkisi olmadan yükseltilebilir.

Kuyruk oluşturma

Aşağıdaki seçeneklerden birini kullanarak kuyruklar oluşturabilirsiniz:

Ardından, aşağıdakiler de dahil olmak üzere programlama dillerinde yazılmış istemcileri kullanarak ileti gönderip alın:

Alma modları

Tüketicilerin Service Bus'tan ileti alabileceği iki farklı mod belirtebilirsiniz.

  • Alma ve silme. Bu modda, Service Bus tüketiciden isteği aldığında, iletiyi tüketiliyor olarak işaretler ve tüketici uygulamasına döndürür. Bu mod en basit modeldir. Bir hata oluştuğunda uygulamanın bir iletiyi işlememeye dayanabileceği senaryolar için en iyi şekilde çalışır. Bu senaryoyu anlamak için tüketicinin alma isteğini ilettiği ve işlemeden önce kilitlendiği bir senaryo düşünün. Service Bus iletiyi tüketildi olarak işaretledikçe, uygulama yeniden başlatıldıktan sonra iletileri tüketmeye başlar. Kilitlenmeden önce tüketilen iletiyi kaçıracaktır. Bu işlem genellikle en çok bir kez işleme olarak adlandırılır.
  • Kilit' i seçin. Bu modda alma işlemi, iletilerin atlanmasını kaldıramayan uygulamaların desteklenmesini mümkün kılacak şekilde iki aşamalı olur.
    1. Kullanılacak sonraki iletiyi bulur, diğer tüketicilerin almasını önlemek için kilitler ve ardından iletiyi uygulamaya döndürür.

    2. Uygulama iletiyi işlemeyi bitirdikten sonra Service Bus hizmetinden alma işleminin ikinci aşamasını tamamlamasını ister. Ardından hizmet , iletiyi tüketilen olarak işaretler.

      Uygulama bir nedenle iletiyi işleyemiyorsa Service Bus hizmetinden iletiyi bırakmasını isteyebilir. Service Bus iletinin kilidini açar ve aynı tüketici veya rakip başka bir tüketici tarafından yeniden alınabilecek şekilde kullanılabilir hale getirir. İkinci olarak, kilitle ilişkilendirilmiş bir zaman aşımı vardır. Kilit zaman aşımına ulaşılmadan önce uygulama iletiyi işlemede başarısız olursa, Service Bus iletinin kilidini açar ve yeniden alınabilir duruma getirir.

      Uygulama iletiyi işledikten sonra ama Service Bus hizmetinin iletiyi tamamlamasını istemeden önce kilitlenirse, uygulama yeniden başlatıldığında Service Bus iletiyi uygulamaya yeniden teslim eder. Bu işlem genellikle en az bir kez işlenir. Yani her ileti en az bir kez işlenir. Ancak bazı durumlarda aynı ileti yeniden teslim edilebilir. Senaryonuz yinelenen işlemeyi tolere edemiyorsa, yinelenenleri algılamak için uygulamanıza ek mantık ekleyin. Daha fazla bilgi için bkz. Tam olarak bir kez işleme olarak bilinen Yinelenen algılama.

      Not

      Bu iki mod hakkında daha fazla bilgi için bkz . Alma işlemlerini düzenleme.

Konular ve abonelikler

Kuyruk, iletinin tek bir müşteri tarafından işlenmesine olanak tanır. Kuyrukların aksine, konular ve abonelikler yayımlama ve abone olma düzeninde bire çok iletişim biçimi sağlar. Çok sayıda alıcıya ölçeklendirme açısından kullanışlıdır. Yayımlanan her ileti konu başlığıyla kaydedilen her aboneliğinin kullanımına sunulur. Publisher bir konuya ileti gönderir ve bir veya daha fazla abone iletinin bir kopyasını alır.

Üç aboneliği olan bir Service Bus konusunu gösteren görüntü.

Abonelikler, almak istedikleri iletileri kısıtlamak için daha fazla filtre kullanabilir. Yayımcılar, kuyruğa ileti gönderirken kullandıkları gibi bir konuya ileti gönderir. Ancak tüketiciler doğrudan konu başlığından ileti almaz. Bunun yerine tüketiciler, konunun aboneliklerinden iletiler alır. Konu aboneliği, konuya gönderilen iletilerin kopyalarını alan bir sanal kuyruğa benzer. Tüketiciler bir abonelikten kuyruktan ileti alma şekliyle aynı şekilde iletiler alır.

Kuyruğun ileti gönderme işlevi doğrudan bir konuya eşler ve ileti alma işlevselliği bir aboneliğe eşler. Diğer özelliklerin yanı sıra, bu özellik aboneliklerin bu bölümün başlarında kuyruklarla ilgili olarak açıklanan desenleri desteklediği anlamına gelir: rakip tüketici, zamana bağlı ayırma, yük dengeleme ve yük dengeleme.

Konu başlıklarını ve abonelikleri oluşturma

Konu oluşturmak, önceki bölümde açıklandığı gibi kuyruk oluşturmaya benzer. Aşağıdaki seçeneklerden birini kullanarak konu başlıkları ve abonelikler oluşturabilirsiniz:

Ardından, bir konuya ileti gönderin ve aşağıdakiler dahil olmak üzere programlama dillerinde yazılmış istemcileri kullanarak aboneliklerden iletiler alın:

Kurallar ve eylemler

Birçok senaryoda, belirli özelliklere sahip iletiler farklı şekillerde işlenmelidir. Bu işlemeyi etkinleştirmek için abonelikleri, istenen özelliklere sahip iletileri bulacak şekilde yapılandırabilir ve ardından bu özelliklerde belirli değişiklikler yapabilirsiniz. Service Bus abonelikleri konuya gönderilen tüm iletileri görse de, bu iletilerin yalnızca bir alt kümesini sanal abonelik kuyruğuna kopyalamak mümkündür. Bu filtreleme, abonelik filtreleri kullanılarak gerçekleştirilir. Bu tür değişikliklere filtre eylemleri adı verilir. Abonelik oluşturulduğunda, iletinin özellikleri üzerinde çalışan bir filtre ifadesi sağlayabilirsiniz. Özellikler hem sistem özellikleri (örneğin, Etiket) hem de özel uygulama özellikleri (örneğin, StoreName) olabilir. SQL filtre ifadesi bu durumda isteğe bağlıdır. SQL filtre ifadesi olmadan, bir abonelikte tanımlanan tüm filtre eylemleri söz konusu aboneliğin tüm iletilerinde gerçekleştirilir.

Tam çalışma örneği için GitHub'da TopicFilters örneğine bakın. Filtreler hakkında daha fazla bilgi için bkz . Konu filtreleri ve eylemleri.

Java message service (JMS) 2.0 varlıkları

Aşağıdaki varlıklara Java ileti hizmeti (JMS) 2.0 API'sini kullanarak erişilebilir.

  • Geçici kuyruklar
  • Geçici konular
  • Paylaşılan dayanıklı abonelikler
  • Paylaşılmayan dayanıklı abonelikler
  • Paylaşılan dayanıklı olmayan abonelikler
  • Paylaşılmayan dayanıklı olmayan abonelikler

JMS 2.0 varlıkları ve bunların nasıl kullanılacağı hakkında daha fazla bilgi edinin.

Express Varlıkları

Hızlı varlıklar yüksek aktarım hızı ve azaltılmış gecikme süresi senaryoları için oluşturulmuştur. Hızlı varlıklarda, bir kuyruğa veya konuya ileti gönderilirse, ileti hemen mesajlaşma deposunda depolanmaz. Bunun yerine, ileti başlangıçta bellekte önbelleğe alınır. Varlıkta kalan iletiler bir gecikmeden sonra ileti deposuna yazılır ve bu noktada bunlar kesinti nedeniyle kaybolmaya karşı korunur.

Normal varlıklarda, tüm çalışma zamanı işlemleri (Gönderme, Tamamlama, Bırakma, Geri Alma gibi) önce depoda kalıcı hale gelir ve ancak bu işlem istemciye başarılı olarak kabul edildikten sonra kalıcı hale gelir. Hızlı varlıklarda, bir çalışma zamanı işlemi istemciye önce başarılı olarak kabul edilir ve yalnızca daha sonra depoda gizli olarak kalıcı hale gelir. Sonuç olarak, makinenin yeniden başlatılması durumunda veya bir donanım sorunu oluştuğunda, kabul edilen bazı çalışma zamanı işlemleri hiç kalıcı olmayabilir. Bu, potansiyel veri kaybı ve/veya iletilerin yeniden teslimi pahasına istemcinin hızlı varlıklarda daha düşük gecikme süresi ve daha yüksek aktarım hızı elde edildiği anlamına gelir.

Ayrıca, zaman içinde Service Bus içinde birçok iyileştirme yapılmıştır, yani hızlı varlıkların aktarım hızı ve gecikme süresi avantajları şu anda en düşük düzeydedir. Ayrıca, Service Bus'ın Premium katmanı Express varlıklarını desteklemez. Bu nedenle, şu anda bu özelliğin kullanılması önerilmez.

Sonraki adımlar

Örnekleri dilediğiniz dilde deneyin:

Eski .NET ve Java istemci kitaplıklarını kullanan örnekler için aşağıdaki bağlantıları kullanın:

30 Eylül 2026'da Azure SDK yönergelerine uymayan WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus ve com.microsoft.azure.servicebus Azure Service Bus SDK kitaplıklarını kullanımdan kaldıracağız. Ayrıca SBMP protokolünün desteğini de sonlandıracağız, bu nedenle 30 Eylül 2026'da bu protokolü artık kullanamayacaksınız. Bu tarihten önce kritik güvenlik güncelleştirmeleri ve geliştirilmiş özellikler sunan en son Azure SDK kitaplıklarına geçiş yapın.

Eski kitaplıklar 30 Eylül 2026'dan sonra da kullanılabilir olsa da artık Microsoft'tan resmi destek ve güncelleştirmeler almayacaktır. Daha fazla bilgi için bkz . destek kullanımdan kaldırma duyurusu.