Aracılığıyla paylaş


Kuyruklara genel bakış

Bu bölümde, kuyruğa alınan iletişimin ardındaki genel ve temel kavramlar tanıtılır. Sonraki bölümlerde, burada açıklanan kuyruğa alma kavramlarının Windows Communication Foundation'da (WCF) nasıl bildirilmesiyle ilgili ayrıntılara yer veilmektedir.

Temel Kuyruğa Alma Kavramları

Dağıtılmış bir uygulama tasarlarken, hizmetler ve istemciler arasındaki iletişim için doğru taşımanın seçilmesi önemlidir. Kullanılacak taşıma türünü çeşitli faktörler etkiler. Önemli bir faktör olan hizmet, istemci ve aktarım arasındaki yalıtım, kuyruğa alınmış aktarım veya TCP veya HTTP gibi doğrudan aktarım kullanımını belirler. TCP ve HTTP gibi doğrudan aktarımların doğası gereği, hizmet veya istemci çalışmayı durdurursa veya ağ başarısız olursa iletişim tamamen durur. Uygulamanın çalışması için hizmet, istemci ve ağ aynı anda çalışıyor olmalıdır. Kuyruğa alınan aktarımlar yalıtım sağlar; başka bir deyişle hizmet veya istemci başarısız olursa veya aralarındaki iletişim bağlantıları başarısız olursa, istemci ve hizmet çalışmaya devam edebilir.

Kuyruklar, iletişim kuran taraflarda veya ağda oluşan hatalarla bile güvenilir iletişim sağlar. Kuyruklar, iletişimde bulunan taraflar arasında ileti alışverişi yapılan iletileri yakalar ve teslim eder. Kuyruklar genellikle geçici veya dayanıklı olabilecek bir tür mağaza tarafından desteklenir. Kuyruklar bir hizmet adına istemciden gelen iletileri depolar ve daha sonra bu iletileri hizmete iletir. Dolaylı kuyruklar, hataların her iki taraf tarafından yalıtılmasını sağlar, böylece yüksek kullanılabilirlik sistemleri ve bağlantısız hizmetler için tercih edilen iletişim mekanizması haline getirir. Dolaylılık, yüksek gecikme süresi maliyetiyle birlikte gelir. Gecikme, istemcinin ileti gönderme süresi ile hizmetin aldığı süre arasındaki gecikme süresidir. Bu, bir ileti gönderildikten sonra iletinin ne zaman işlenebileceğini bilmediğiniz anlamına gelir. Kuyruğa alınan uygulamaların çoğu yüksek gecikme süresiyle başa çıkabiliyor. Aşağıdaki çizimde kuyruğa alınmış iletişimin kavramsal modeli gösterilmektedir.

Model of queued communication

Kuyruğa alınan iletişim kavramsal modeli

Gerçekte kuyruk dağıtılmış bir kavramdır. Bu nedenle, her iki taraf için yerel veya her iki taraf için uzak olabilir. Genellikle kuyruk, hizmet için yereldir. Bu yapılandırmada istemci, sürekli kullanılabilir olması için uzak kuyruğa bağlanmaya bağımlı olamaz. Benzer şekilde kuyruk, kuyruktan okunan hizmetin kullanılabilirliğinden bağımsız olarak kullanılabilir olmalıdır. Kuyruk yöneticisi bir kuyruk koleksiyonunu yönetir. Diğer kuyruk yöneticilerinden kuyruklarına gönderilen iletileri kabul etmek sorumludur. Ayrıca, uzak kuyruklara bağlantıyı yönetmek ve iletileri bu uzak kuyruklara aktarmaktan da sorumludur. İstemci veya hizmet uygulaması hatalarına rağmen kuyrukların kullanılabilirliğini sağlamak için kuyruk yöneticisi genellikle bir dış hizmet olarak çalıştırılır.

bir istemci kuyruğa bir ileti gönderdiğinde, iletiyi hizmetin kuyruk yöneticisi tarafından yönetilen kuyruk olan hedef kuyruğa giderir. İstemcideki kuyruk yöneticisi iletiyi bir iletim (veya giden) kuyruğuna gönderir. İletim kuyruğu, istemci kuyruğu yöneticisinde hedef kuyruğa iletim için iletileri depolayan bir kuyruk. Ardından kuyruk yöneticisi, hedef kuyruğun sahibi olan kuyruk yöneticisinin yolunu bulur ve iletiyi bu kuyruğa aktarır. Güvenilir iletişim sağlamak için kuyruk yöneticileri, veri kaybını önlemek için güvenilir bir aktarım protokolü uygular. Hedef kuyruk yöneticisi, sahip olduğu hedef kuyruklara gönderilen iletileri kabul eder ve iletileri depolar. Hizmet, hedef kuyruktan okuma isteğinde bulunur ve bu sırada kuyruk yöneticisi iletiyi hedef uygulamaya teslim eder. Aşağıdaki çizimde dört taraf arasındaki iletişim gösterilmektedir.

Queued Application Diagram

Tipik bir dağıtım senaryosunda kuyruğa alınmış iletişim

Bu nedenle, kuyruk yöneticisi gerekli yalıtımı sağlar, böylece gönderen ve alıcı gerçek iletişimi etkilemeden bağımsız olarak başarısız olabilir. Kuyrukların sağladığı ek dolaylılık avantajı, düğümler arasında çiftçilik çalışmasının daha yüksek aktarım hızı elde edebilmesi için birden çok uygulama örneğinin aynı kuyruktan okumasına da olanak tanır. Bu nedenle, daha yüksek ölçek ve aktarım hızı gereksinimlerini elde etmek için kullanılan kuyrukları görmek nadir değildir.

Kuyruklar ve İşlemler

İşlemler, bir işlem başarısız olursa tüm işlemlerin başarısız olması için bir dizi işlemi birlikte gruplandırmanıza olanak tanır. İşlemlerin nasıl kullanılacağına örnek olarak, bir kişinin tasarruf hesabından çek hesabına 1.000 ABD doları aktarmak için ATM kullanması gösteriliyor. Bu, aşağıdaki işlemleri gerektirir:

  • Tasarruf hesabından 1.000 DOLAR çekiliyor.

  • Çek hesabına 1000 dolar yatırıyor.

İlk işlem başarılı olursa ve 1.000 ABD doları tasarruf hesabından çekilirse ancak ikinci işlem başarısız olursa, tasarruf hesabından zaten çekildiği için 1.000 ABD doları kaybolur. Hesapları geçerli bir durumda tutmak için, bir işlem başarısız olursa her iki işlem de başarısız olmalıdır.

İşlemsel mesajlaşmada iletiler kuyruğa gönderilebilir ve bir işlem kapsamında kuyruktan alınır. Bu nedenle, bir işlemde bir ileti gönderilirse ve işlem geri alınırsa, sonuç ileti kuyruğa hiç gönderilmemiş gibi olur. Benzer şekilde, bir işlemde bir ileti alınırsa ve işlem geri alınırsa, sonuç ileti hiç alınmamış gibi olur. İleti okunacak kuyrukta kalır.

Yüksek gecikme süresi nedeniyle, bir ileti gönderdiğinizde hedef kuyruğa ulaşmanın ne kadar sürdüğünü veya hizmetin iletiyi işlemesinin ne kadar sürdüğünü bilmeniz mümkün değildir. Bu nedenle, iletiyi göndermek, iletiyi almak ve sonra iletiyi işlemek için tek bir işlem kullanmak istemezsiniz. Bu, belirsiz bir süre için işlenmeyen bir işlem oluşturur. bir istemci ve hizmet bir işlem kullanarak bir kuyruk üzerinden iletişim kurarken, biri istemcide, diğeri hizmette olmak üzere iki işlem söz konusu olur. Aşağıdaki çizimde, tipik kuyruğa alınmış iletişimdeki işlem sınırları gösterilmektedir.

Queue with transactions

Yakalama ve teslim için ayrı işlemleri gösteren kuyruğa alınmış iletişim

İstemci işlemi, iletiyi işler ve gönderir. İşlem işlendiğinde, ileti iletim kuyruğundadır. Hizmette işlem, hedef kuyruktan iletiyi okur, iletiyi işler ve ardından işlemi işler. İşlem sırasında bir hata oluşursa, ileti geri alınır ve hedef kuyruğa yerleştirilir.

Kuyrukları Kullanarak Zaman Uyumsuz İletişim

Kuyruklar zaman uyumsuz bir iletişim aracı sağlar. Kuyrukları kullanarak ileti gönderen uygulamalar, kuyruk yöneticisi tarafından sunulan yüksek gecikme süresi nedeniyle iletinin alıcı tarafından alınmasını ve işlenmesini bekleyemiyor. İletiler, uygulamanın hedeflediğinden çok daha uzun bir süre kuyrukta kalabilir. Bunu önlemek için uygulama iletide Yaşam Süresi değerini belirtebilir. Bu değer, iletinin iletim kuyruğunda ne kadar süreyle kalması gerektiğini belirtir. Bu zaman değeri aşılırsa ve ileti yine de hedef kuyruğa gönderilmediyse, ileti bir teslim edilemeyen ileti kuyruğuna aktarılabilir.

Gönderen bir ileti gönderdiğinde, gönderme işleminden döndürülen iletinin yalnızca gönderendeki iletim kuyruğuna yaptığı anlamına gelir. Bu nedenle, iletiyi hedef kuyruğa almada bir hata varsa, gönderen uygulama bunu hemen öğrenemez. Bu tür hataları not almak için başarısız ileti, teslim edilemeyen bir kuyruğa aktarılır.

İletinin hedef kuyruğa ulaşamaması veya Yaşam Süresi süresinin dolması gibi tüm hatalar ayrı olarak işlenmelidir. Bu nedenle kuyruğa alınan uygulamaların iki mantık kümesi yazması yaygın değildir:

  • İleti gönderme ve alma işleminin normal istemci ve hizmet mantığı.

  • Başarısız iletim veya teslimden gelen iletileri işlemek için telafi mantığı.

Aşağıdaki bölümlerde bu kavramlar ele alınmaktadır.

Teslim Edilemeyen Kuyruk Programlama

Teslim edilemeyen kuyruklar, çeşitli nedenlerle hedef kuyruğa ulaşamayan iletiler içerir. Bunun nedenleri, süresi dolan iletilerden iletinin hedef kuyruğa aktarılmasını engelleyen bağlantı sorunlarına kadar değişebilir.

Genellikle, bir uygulama sistem genelindeki bir teslim edilemeyen ileti kuyruğundan gelen iletileri okuyabilir, neyin yanlış gittiğini belirleyebilir ve hataları düzeltme ve iletiyi yeniden gönderme veya not alma gibi uygun eylemleri gerçekleştirebilir.

Zehirli İleti Kuyruğu Programlama

Bir ileti hedef kuyruğa geçtikten sonra hizmet sürekli olarak iletiyi işleyemeyebilir. Örneğin, bir işlem altındaki kuyruktan ileti okuyan ve veritabanını güncelleştiren bir uygulama, veritabanının geçici olarak bağlantısının kesilmiş olduğunu bulabilir. Bu durumda işlem geri alınır, yeni bir işlem oluşturulur ve ileti kuyruktan yeniden okunur. İkinci bir deneme başarılı veya başarısız olabilir. Bazı durumlarda, hatanın nedenine bağlı olarak ileti tekrar tekrar uygulamaya teslim edilemez. Bu durumda, ileti "zehir" olarak kabul edilir. Bu tür iletiler, zehir işleme uygulaması tarafından okunabilen bir zehirli kuyruğa taşınır.

Ayrıca bkz.