Görünürlük Zaman Aşımı, DLQ ve Uzun Yoklama
Mesajların iki kez işlenmemesi için görünürlük zaman aşımlarını ayarlayacak, başarısız mesajları ölü mektup kuyruğuna yönlendirecek ve uzun yoklamayla maliyetleri azaltacaksınız.
Görünürlük Zaman Aşımı, DLQ ve Uzun Yoklama, CoddyKit'te ücretsiz bir AWS Solutions Architect dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AWS Solutions Architect öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AWS Solutions Architect kursu toplamda 4 dersten oluşur.
Görünürlük Zaman Aşımı Mekanizması
Bir tüketici SQS'den mesaj aldığında mesaj, görünürlük zaman aşımı adı verilen bir süre boyunca diğer tüm tüketicilerden gizlenir. Bu süre içinde tüketici mesajı işler ve ardından siler. Tüketici çöker veya mesajı zamanında tamamlayamazsa görünürlük zaman aşımı sona erer ve mesaj yeniden görünür hâle gelir; böylece başka bir tüketici mesajı alabilir. Bu, SQS'nin en az bir kez teslimat garantisinin temel mekanizmasıdır.
Görünürlük Zaman Aşımını Yapılandırma
Varsayılan görünürlük zaman aşımı 30 saniyedir. Bu değer 0 saniye ile 12 saat arasında ayarlanabilir. Beklenen en uzun işleme süresini rahatça aşacak şekilde ayarlayın; işleme 2 dakikaya kadar sürüyorsa zaman aşımını en az 3-4 dakika olarak belirleyin. Ayrıca change-message-visibility kullanarak zaman aşımını makbuz başına değiştirebilirsiniz. Bu, tüketicinin belirli bir mesajın işlenmesini tamamlamak için daha fazla zamana ihtiyaç duyduğunu fark ettiği durumlarda kullanışlıdır.
# Extend visibility timeout for a specific message
aws sqs change-message-visibility \
--queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue' \
--receipt-handle 'AQEBwJnKyrHigUMZj...' \
--visibility-timeout 300Çok Kısa ve Çok Uzun Zaman Aşımı
Zaman aşımını çok kısa ayarlamak, tüketici işlemi tamamlamadan önce mesajların yeniden görünmesine ve yinelenen işlemeye neden olur. Zaman aşımını çok uzun ayarlamak ise özgün tüketici sessizce başarısız olduğunda (örneğin, düzgün bir temizlik işlemi gerçekleşmeden EC2 örneğinin çökmesi) başka bir tüketicinin mesajı almasını geciktirir. En uygun zaman aşımı, 99. yüzdelik dilimdeki işleme sürenizden biraz uzun, ancak tüketici hatalarından hızlıca kurtulmaya yetecek kadar kısa olmalıdır. Zaman aşımı sorunlarını belirlemek için ApproximateNumberOfMessagesNotVisible CloudWatch metriğini izleyin.
Ölü Harf Kuyrukları Açıklaması
Ölü Harf Kuyruğu (DLQ), mesajların yapılandırılabilir sayıda başarısız işleme denemesinden sonra gönderildiği ayrı bir SQS kuyruğudur (maxReceiveCount). Bir mesajın alma sayısı maxReceiveCount değerini aştığında SQS, mesajı otomatik olarak DLQ'ya taşır. DLQ'lar, sürekli başarısız olan zehirli mesajların kuyruğu süresiz olarak engellemesini önler. DLQ'daki mesajlar incelenebilir, hataları ayıklanabilir ve işleme hatası düzeltildikten sonra yeniden oynatılabilir.
Ölü Harf Kuyruğunu Yapılandırma
DLQ, yalnızca normal bir SQS kuyruğudur (Standard kaynak için Standard, FIFO kaynak için FIFO). Kaynak kuyrukta, hangi kuyruğun DLQ olduğunu ve maxReceiveCount eşiğini belirtmek üzere Yeniden Yönlendirme İlkesini yapılandırırsınız. DLQ'nın saklama süresinin daha uzun olmasını sağlayın; mesajlar DLQ'ya geç ulaşır ve süreleri dolmadan önce inceleme yapmak için zamana ihtiyacınız vardır.
aws sqs set-queue-attributes \
--queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue' \
--attributes '{
"RedrivePolicy": "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-1:123456789012:MyDLQ\", \"maxReceiveCount\": \"5\"}"
}'DLQ İzleme ve Alarm Kurulumu
DLQ'nın ApproximateNumberOfMessagesVisible metriği için bir CloudWatch alarmı ayarlayın. DLQ'ya ulaşan her mesaj, ilgilenilmesi gereken bir işleme hatasına işaret eder. Alarmı, nöbetçi mühendisinize hemen bildirim gönderen bir SNS bildirimi tetikleyecek şekilde yapılandırın. Her DLQ mesajını incelenmesi gereken bir hata olarak değerlendirin; DLQ mesajlarının sessizce birikmesine izin verilmemelidir. Hatayı düzelttikten sonra, mesajları yeniden işlenmek üzere kaynak kuyruğa göndermek için DLQ Yeniden Yönlendirme özelliğini kullanın.
DLQ Yeniden Yönlendirme: Mesajları Yeniden Oynatma
İşleme hatalarına neden olan hatayı düzelttikten sonra, mesajları DLQ'dan kaynak kuyruğa yeniden işlenmek üzere taşımak için SQS DLQ Yeniden Yönlendirme özelliğini kullanın. Konsol, yerleşik bir yeniden yönlendirme özelliği sunar. Yalnızca belirli mesajları yeniden oynatmak için mesaj özniteliklerine göre filtreleme yapabilirsiniz. Alternatif olarak, özel filtreleme mantığına ihtiyacınız varsa DLQ'yu yoklayıp mesajları kaynak kuyruğa geri iletmek üzere bir Lambda işlevi yazabilirsiniz.
# Start DLQ message move task
aws sqs start-message-move-task \
--source-arn 'arn:aws:sqs:us-east-1:123456789012:MyDLQ' \
--destination-arn 'arn:aws:sqs:us-east-1:123456789012:MyQueue' \
--max-number-of-messages-per-second 5Kısa Yoklama ve Uzun Yoklama
Varsayılan olarak SQS, kısa yoklama kullanır: Bir receive-message çağrısı sunucuların rastgele bir alt kümesini örnekler ve hiç mesaj olmasa bile hemen yanıt verir. Bu, çok sayıda boş yanıta yol açar ve API çağrılarını boşa harcar. Uzun yoklama, boş yanıt vermeden önce bir mesajın gelmesini 20 saniyeye kadar bekler. Uzun yoklama maliyetleri önemli ölçüde azaltır (daha az API çağrısı) ve gecikmeyi düşürür (mesaj, sonraki yoklama döngüsünden 20 saniyeye kadar daha erken, gelir gelmez alınır).
Uzun Yoklamayı Etkinleştirme
Uzun yoklamayı kuyruk düzeyinde (tüm alma çağrılarına uygulanır) veya istek başına etkinleştirebilirsiniz. Çoğu uygulama için ReceiveMessageWaitTimeSeconds değerinin 20 olduğu kuyruk düzeyi yapılandırması önerilen ayardır. Lambda, olay kaynağı olarak SQS'yi kullandığında uzun yoklamayı otomatik olarak kullanır. EC2 tabanlı tüketiciler için receive-message çağrısında WaitTimeSeconds değerini ayarlayın.
# Enable long polling at queue level (recommended)
aws sqs set-queue-attributes \
--queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue' \
--attributes '{"ReceiveMessageWaitTimeSeconds": "20"}'
# Or per-request
aws sqs receive-message \
--queue-url 'https://...' \
--wait-time-seconds 20 \
--max-number-of-messages 10Mesaj Öznitelikleri ve Filtreleme
SQS mesajları, mesaj gövdesinden ayrı meta veri anahtar-değer çiftleri olan mesaj özniteliklerini taşıyabilir. Özniteliklerin bir türü (String, Number, Binary) ve bir değeri vardır. SQS bir SNS konusuna abone olduğunda, yalnızca ilgili mesajları her kuyruğa yönlendirmek için mesaj özniteliklerine uygulanan SNS abonelik filtre ilkelerini kullanabilirsiniz. Filtreleme olmadan, içeriğinden bağımsız olarak her SQS abonesi her SNS yayınını alır.
Gecikme Kuyrukları ve Mesaj Zamanlayıcıları
Bir Gecikme Kuyruğu, her yeni mesajı gönderildikten sonra bir gecikme süresi boyunca (0 ila 15 dakika) görünmez hâle getirir. Bu, bir tüketicinin mesajı hemen işlememesi gereken iş akışlarında, örneğin önce bağımlı bir işlemin tamamlanmasını beklerken kullanışlıdır. Ayrıca gönderme çağrısında DelaySeconds kullanarak mesaj başına gecikme ayarlayabilirsiniz; bu değer kuyruk düzeyindeki gecikmeyi geçersiz kılar. Not: Gecikme kuyrukları FIFO kuyruklarında kullanılamaz.
# Create a delay queue (5 minute delay)
aws sqs create-queue \
--queue-name 'DelayedProcessingQueue' \
--attributes '{"DelaySeconds": "300"}'Hızlı Kontrol
Bu dersteki AWS Solutions Architect (SAA-C03) kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: Visibility Timeout, işleme sırasında bir mesajı diğer tüketicilerden gizleyerek en az bir kez teslimi mümkün kılar ve tüketici başarısız olursa otomatik yeniden teslimat gerçekleştirir; Dead-Letter Queues, hata ayıklandıktan sonra hata ayıklama ve yeniden oynatma için tekrar tekrar başarısız olan mesajları yakalar; Long Polling (20 saniyeye kadar bekleme süresi), kısa yoklamaya kıyasla API maliyetlerini ve gecikmeyi azaltır. Sırada SNS konularını ve fan-out mimarisini inceleyeceğiz.
Sıkça Sorulan Sorular
“Görünürlük Zaman Aşımı, DLQ ve Uzun Yoklama” dersi ücretsiz mi?
Evet — “Görünürlük Zaman Aşımı, DLQ ve Uzun Yoklama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AWS Solutions Architect kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AWS Solutions Architect kursu toplamda 4 dersten oluşur.
“Görünürlük Zaman Aşımı, DLQ ve Uzun Yoklama” dersinde ne öğreneceğim?
Mesajların iki kez işlenmemesi için görünürlük zaman aşımlarını ayarlayacak, başarısız mesajları ölü mektup kuyruğuna yönlendirecek ve uzun yoklamayla maliyetleri azaltacaksınız. AWS Solutions Architect ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AWS Solutions Architect öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AWS Solutions Architect, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Görünürlük Zaman Aşımı, DLQ ve Uzun Yoklama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AWS Solutions Architect dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AWS Solutions Architect dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- SQS Standard ve FIFO Kuyrukları
- Görünürlük Zaman Aşımı, DLQ ve Uzun Yoklama
- SNS Konuları ve Fan-Out Mimarisi
- SQS Mesaj Filtreleme ve SNS + SQS Entegrasyonu