AWS SQS Retention Period: Mesaj Saklama Süresi ve Ayarları
AWS Simple Queue Service (SQS), dağıtık sistemlerin birbirleriyle iletişim kurmasını sağlayan güçlü bir mesajlaşma servisidir. SQS yapılandırmasında en önemli parametrelerden biri Retention Period yani Mesaj Saklama Süresi'dir.
Bu makalede, SQS Retention Period nedir, varsayılan değerleri nelerdir ve süresi dolan mesajlara ne olur gibi soruları yanıtlayacağız.
<div class="toc"> <ul> <li><a href="#aws-sqs-retention-period-nedir">AWS SQS Retention Period Nedir?</a></li> <li><a href="#varsayilan-ve-maksimum-saklama-sureleri">Varsayılan ve Maksimum Saklama Süreleri</a></li> <li><a href="#mesaj-yasam-dongusu-ve-silinme">Mesaj Yaşam Döngüsü ve Silinme</a></li> <li><a href="#dead-letter-queue-dlq-kullanimi">Dead Letter Queue (DLQ) Kullanımı</a></li> <li><a href="#retention-period-nasil-yapilandirilir">Retention Period Nasıl Yapılandırılır?</a></li> <li><a href="#sikca-sorulan-sorular-sss">Sıkça Sorulan Sorular (SSS)</a></li> </ul> </div> <h2 id="aws-sqs-retention-period-nedir">AWS SQS Retention Period Nedir?</h2>Retention Period (Saklama Süresi), bir mesajın SQS kuyruğuna eklendikten sonra otomatik olarak silinmeden önce kuyrukta ne kadar süre kalacağını belirleyen bir ayardır. Daha fazla teknik detay için <a href="https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-retention-period.html" target="_blank" rel="noopener noreferrer">AWS SQS Message Retention Period Dokümantasyonu</a>'nu inceleyebilirsiniz.
Mesajlar bu süre zarfında tüketilmezse (consumer tarafından işlenip silinmezse), AWS SQS bu mesajları otomatik olarak kuyruktan siler. Bu süre, mesajın kuyruğa ilk eklendiği andan itibaren başlar. Mesajın işlenip işlenmediği veya hata alıp almadığı süreyi sıfırlamaz.
<h2 id="varsayilan-ve-maksimum-saklama-sureleri">Varsayılan ve Maksimum Saklama Süreleri</h2>SQS kuyrukları için saklama süreleri şu şekildedir:
- Varsayılan Süre: 4 Gün
- Minimum Süre: 60 Saniye (1 Dakika)
- Maksimum Süre: 14 Gün (1,209,600 Saniye)
Bu esneklik sayesinde, uygulamanızın gereksinimlerine göre mesajların ne kadar süre kuyrukta kalacağını ayarlayabilirsiniz. Örneğin, hata ayıklama (debugging) süreçleri için süreyi uzatabilir veya hızlı tüketilmesi gereken veriler için süreyi kısaltabilirsiniz.
<h2 id="mesaj-yasam-dongusu-ve-silinme">Mesaj Yaşam Döngüsü ve Silinme</h2>Bir mesajın yaşam döngüsü genellikle şu adımları izler:
- Üretici (Producer): Mesajı kuyruğa gönderir. "Message Available" durumuna geçer. Saklama süresi sayacı başlar.
- Tüketici (Consumer): Mesajı işlemek üzere alır. Mesaj "In-Flight" (işleniyor) durumuna geçer.
- Başarılı İşleme: Tüketici mesajı başarıyla işler ve kuyruktan siler.
- Hatalı İşleme: Tüketici hata alırsa, mesaj görünürlük süresi (Visibility Timeout) sonunda tekrar kuyruğa döner.
Ancak, Retention Period dolduğunda, mesaj hangi durumda olursa olsun (işleniyor olsa bile) kuyruktan kalıcı olarak silinir. Bu nedenle, saklama süresini belirlerken tüketicilerin işlem süresini ve olası gecikmeleri hesaba katmalısınız.
<h2 id="dead-letter-queue-dlq-kullanimi">Dead Letter Queue (DLQ) Kullanımı</h2>Süresi dolan veya işlenemeyen mesajların kaybolmasını önlemek için Dead Letter Queue (DLQ) kullanmak en iyi yöntemdir. Bir mesaj belirlenen Maximum Receive Count (Maksimum Alma Sayısı) değerine ulaştığında veya saklama süresi dolduğunda (Redrive Policy yapılandırmasına bağlı olarak), otomatik olarak DLQ'ya taşınabilir.
Bu sayede hatalı mesajları inceleyebilir ve veri kaybını önleyebilirsiniz.
<h2 id="retention-period-nasil-yapilandirilir">Retention Period Nasıl Yapılandırılır?</h2>Retention Period ayarını AWS Konsolu, AWS CLI veya Terraform gibi IaC araçlarıyla değiştirebilirsiniz.
<h3 id="aws-cli-ile-yapilandirma">AWS CLI ile Yapılandırma</h3>Aşağıdaki komut, mevcut bir kuyruğun saklama süresini 14 gün (1,209,600 saniye) olarak ayarlar. Komut detayları için <a href="https://docs.aws.amazon.com/cli/latest/reference/sqs/set-queue-attributes.html" target="_blank" rel="noopener noreferrer">AWS CLI Command Reference: set-queue-attributes</a> sayfasına bakabilirsiniz.
aws sqs set-queue-attributes --queue-url https://sqs.us-east-1.amazonaws.com/123456789012/my-queue --attributes MessageRetentionPeriod=1209600
<h3 id="terraform-ile-yapilandirma">Terraform ile Yapılandırma</h3>
Terraform kullanıyorsanız, aws_sqs_queue kaynağında message_retention_seconds parametresini kullanabilirsiniz:
resource "aws_sqs_queue" "terraform_queue" {
name = "terraform-example-queue"
delay_seconds = 90
max_message_size = 2048
message_retention_seconds = 1209600 # 14 gün
receive_wait_time_seconds = 10
}
<h2 id="sikca-sorulan-sorular-sss">Sıkça Sorulan Sorular (SSS)</h2>
<h3 id="sss-1">1. SQS mesajları varsayılan olarak ne kadar süre saklanır?</h3>
Varsayılan saklama süresi 4 gündür. Ancak bu süre 1 dakika ile 14 gün arasında değiştirilebilir.
<h3 id="sss-2">2. Saklama süresi dolduğunda mesaja ne olur?</h3>
Süre dolduğunda mesaj otomatik olarak silinir. Eğer bir Dead Letter Queue (DLQ) yapılandırılmışsa, mesajın DLQ'ya taşınması sağlanabilir (yapılandırmaya bağlıdır).
<h3 id="sss-3">3. Saklama süresi 14 günden fazla olabilir mi?</h3>
Hayır, AWS SQS şu an için maksimum 14 gün saklama süresini desteklemektedir. Daha uzun süreli saklama için mesajları Amazon S3 veya DynamoDB gibi kalıcı depolama alanlarına yedeklemeniz önerilir.
Daha fazla bilgi için AWS Danışmanlığı ve Kubernetes Danışmanlığı hizmetlerimize göz atabilirsiniz.
<br> <p>Kaynak / Source: <a href="https://awsfundamentals.com/blog/aws-sqs-retention-period">https://awsfundamentals.com/blog/aws-sqs-retention-period</a></p>