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ı dahil olmak üzere bulut tabanlı, ileti odaklı ara yazılım teknolojileri kümesini destekler. Bu aracılı mesajlaşma özellikleri, Service Bus mesajlaşma iş yükünü kullanarak yayımlama-abone olma, zamansal ayırma ve yük dengeleme senaryolarını destekleyen ayrılmış mesajlaşma özellikleri olarak düşünülebilir. Ayrılmış iletişimin birçok avantajı vardır. Örneğin, istemciler ve sunucular gerektiğinde bağlanabilir ve işlemlerini zaman uyumsuz bir şekilde yapabilir.

Service Bus'daki mesajlaşma özelliklerinin temelini oluşturan mesajlaşma varlıkları kuyruklar, konular ve abonelikler ile kurallar/eylemlerdir.

Kuyruklar

Kuyruklar, bir veya daha fazla rakip tüketiciye İlk Gelen, İlk Çıkan (FIFO) ileti teslimini sunar. Yani, alıcılar genellikle iletileri kuyruğa eklendikleri sırayla alır ve işler. Ayrıca, her iletiyi yalnızca bir ileti tüketicisi alır ve işler. Kuyrukları kullanmanın temel avantajlarından biri , uygulama bileşenlerinin zamansal ayrıştırmasını sağlamaktır. Başka bir deyişle, üreticilerin (gönderenler) ve tüketicilerin (alıcılar) aynı anda ileti gönderip alması gerekmez. Bunun nedeni iletilerin kuyrukta durabilir bir şekilde depolanmasıdır. Ayrıca, üreticinin iletileri işlemeye ve göndermeye devam etmesi için tüketiciden bir yanıt beklemesi gerekmez.

İlgili avantajlardan biri, üreticilerin ve tüketicilerin farklı fiyatlarla 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 işleyen çalışan bilgisayarlar kendi maksimum hızlarında olsa 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 ve tüketiciler arasında ara öğe sağlamak için kuyrukların kullanılması, bileşenler arasında doğal olarak gevşek bir 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

Azure portal, PowerShell, CLI veya Azure Resource Manager şablonlarını (ARM şablonları) kullanarak kuyruklar oluşturabilirsiniz. Ardından C#, Java, Python ve JavaScript ile yazılmış istemcileri kullanarak ileti gönderip alın.

Alma modları

Service Bus iletileri alacağı iki farklı mod belirtebilirsiniz.

  • Alma ve silme. Bu modda, Service Bus isteği tüketiciden aldığında, iletiyi tüketiliyor olarak işaretler ve tüketici uygulamasına döndürür. Bu mod en basit modeldir. Uygulamanın bir hata oluştuğunda ileti işlememeye dayanabileceği senaryolar için en iyi sonucu verir. 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üketiliyor olarak işaretledikçe, uygulama yeniden başlatıldıktan sonra iletileri tüketmeye başlar. Kilitlenmeden önce tüketilen iletiyi kaçırır.
  • Göz atma kilidi. Bu modda, alma işlemi iki aşamalı hale gelir ve bu da eksik iletileri tolere edemeyen uygulamaları desteklemeyi mümkün kılar.
    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 tamamladıktan sonra, alma işleminin ikinci aşamasını tamamlamak için Service Bus hizmetinden istekte bulunur. Ardından hizmet, iletiyi tüketiliyor olarak işaretler.

      Uygulama herhangi bir nedenle iletiyi işleyemiyorsa, Service Bus hizmetinden iletiyi bırakmasını isteyebilir. Service Bus iletinin kilidini açar ve iletinin aynı tüketici tarafından veya başka bir rakip tüketici tarafından yeniden alınmasını sağlar. İkinci olarak, kilitle ilişkili bir zaman aşımı vardır. Uygulama, kilit zaman aşımı süresi dolmadan önce iletiyi işleyemezse, Service Bus iletinin kilidini açar ve yeniden alınabilir hale getirir.

      Uygulama iletiyi işledikten sonra, ancak Service Bus hizmetinden iletiyi tamamlamasını istemeden önce kilitleniyorsa, Service Bus yeniden başlatıldığında iletiyi uygulamaya yeniden teslim eder. Bu işleme genellikle en az bir kez işleme olarak adlandırılır. 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 . Yinelenen algılama. Bu özellik tam olarak bir kez işleme olarak bilinir.

      Not

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

Konular ve abonelikler

Kuyruk, bir iletinin tek bir tüketici 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 yapmak için kullanışlıdır. Yayımlanan her ileti, konu başlığına kayıtlı her abonelik için kullanılabilir hale gelir. Publisher bir konuya ileti gönderir ve bu aboneliklerde ayarlanan filtre kurallarına bağlı olarak bir veya daha fazla abone iletinin bir kopyasını alır. Abonelikler, almak istedikleri iletileri kısıtlamak için ek filtreler kullanabilir. Yayımcılar bir konuya, kuyruğa ileti gönderdiği gibi 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, ileti alma işlevi ise 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 başlığı oluşturmak, önceki bölümde açıklandığı gibi kuyruk oluşturmaya benzer. Azure portal, PowerShell, CLI veya ARM şablonlarını kullanarak konu başlıkları ve abonelikler oluşturabilirsiniz. Ardından bir konuya ileti gönderin ve C#, Java, Python ve JavaScript ile yazılmış istemcileri kullanarak aboneliklerden iletiler alın.

Kurallar ve eylemler

Birçok senaryoda, belirli özelliklere sahip iletilerin farklı şekillerde işlenmesi gerekir. Bu işlemeyi etkinleştirmek için abonelikleri, istenen özelliklere sahip iletileri bulacak ve ardından bu özelliklerde belirli değişiklikleri gerçekleştirecek şekilde yapılandırabilirsiniz. Service Bus abonelikler 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şiklikler filtre eylemleri olarak adlandırılır. 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 diziminin tüm iletilerinde gerçekleştirilir.

Tam bir çalışma örneği için GitHub üzerinde TopicFilters örneğine bakın.

Filtreler hakkında daha fazla bilgi için bkz . Konu filtreleri ve eylemleri.

Java ileti hizmeti (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.

Sonraki adımlar

Azure Service Bus özellikleri keşfetmek için örnekleri istediğiniz dilde deneyin.

Eski .NET ve Java istemci kitaplıkları için örnekleri aşağıda bulabilirsiniz: