Tüm Ürünler
Search
Belge Merkezi

ApsaraMQ for RocketMQ:Scheduled messages and delayed messages

Son Güncelleme:Oct 04, 2026

Zamanlanmış mesajlar ve gecikmeli mesajlar, her ikisi de teslimatı tüketicilere erteler. Aradaki fark, zamanlamanın nasıl belirtildiğidir:

  • Zamanlanmış mesaj: Mutlak bir zaman damgası belirtirsiniz. Broker mesajı tutar ve tam o anda teslim eder.

  • Gecikmeli mesaj: Göreceli bir süre belirtirsiniz. Broker mesajı tutar ve gönderilmesinden itibaren bu süre dolduğunda teslim eder.

Altta yatan mekanizma aynıdır. Broker mesajı depolar ve hedef zamana ulaşıldığında tüketicilere serbest bırakır.

Kullanım senaryoları

  • Sipariş zaman aşımı yönetimi: Bir kullanıcı e-ticaret ödeme akışında bir sipariş oluşturduğunda, 30 dakikalık gecikme ile gecikmeli bir mesaj gönderin. 30 dakika sonra tüketici, ödemenin tamamlanıp tamamlanmadığını kontrol eder. Tamamlanmadıysa siparişi iptal eder. Ödeme başarılı olduysa mesajı yok sayar.

  • Zamanlı bildirimler: Belirli bir saate -- örneğin, ertesi gün saat 09:00'a -- ayarlanmış zamanlanmış bir mesaj göndererek anlık bildirim veya hatırlatıcı tetikleyin.

Teslimat zamanını ayarlama

Her iki mesaj türü de aynı parametreyi kullanır: msg.setStartDeliverTime. Bu parametre, milisaniye hassasiyetinde Unix zaman damgası kabul eder.

  • Zamanlanmış mesaj: Hedef teslimat zamanının mutlak zaman damgasını geçirin.

  • Gecikmeli mesaj: System.currentTimeMillis() + delayMillis değerini geçirin; burada delayMillis milisaniye cinsinden gecikme süresidir.

Kod örnekleri

Bir mesajı şu andan itibaren 10 dakika sonrasına geciktirmek için:

// Calculate the delivery timestamp: current time + 10 minutes
long deliverTime = System.currentTimeMillis() + 10L * 60 * 1000;
msg.setStartDeliverTime(deliverTime);

Belirli bir tarih ve saat için mesajı zamanlamak için:

// Schedule delivery for 2024-06-15 14:30:00 (UTC+8)
// Millisecond Unix timestamp: 1718433000000
long deliverTime = 1718433000000L;
msg.setStartDeliverTime(deliverTime);

Kurallar ve sınırlamalar

Kural Ayrıntılar
Minimum teslimat zamanı Geçerli zaman damgasından daha sonra olmalıdır. Belirtilen zaman geçmişte ise mesaj hemen teslim edilir.
Maksimum zamanlama penceresi Geçerli zamandan itibaren 40 gün. Bu pencereyi aşan mesajlar gönderilemez.
Zaman birimi Milisaniye
Konu türü gereksinimi ApsaraMQ for RocketMQ konsolu içinde Message Type değeri Scheduled/Delayed Message olarak ayarlanarak konu oluşturulmalıdır. Bir konu yalnızca yapılandırılan türle eşleşen mesajları kabul eder.
Mesaj saklama süresi En fazla 3 gün. Örneğin, teslimatı 5 gün sonrasına planlanan bir mesaj tüketilmezse 8. günde silinir (5 günlük gecikme + 3 günlük saklama).

Teslimat hassasiyeti

Zamanlanmış ve gecikmeli mesajların tam belirtilen zamanda ulaşması aşağıdaki faktörler nedeniyle garanti edilmez:

  • Temel gecikme: 1 ila 2 saniye teslimat gecikmesi bekleyin.

  • Mesaj birikimi: Kuyrukta birikmiş mesajlar varsa zamanlanmış ve gecikmeli mesajlar bunların arkasına kuyruğa alınır ve hedef zamandan daha sonra gelebilir.

  • Saat kayması: StartDeliverTime değeri broker saatine göre değerlendirilir. İstemci saati broker saatinden farklıysa gerçek teslimat zamanı üretici tarafından ayarlanan zaman damgasıyla eşleşmeyebilir.

Örnek kod

Tam producer ve consumer örnekleri için protokole ve dile göre düzenlenen aşağıdaki kılavuzlara bakın.

TCP

Dil Bağlantı
Java Zamanlanmış mesajları gönderme ve alma
Java Gecikmeli mesajları gönderme ve abone olma
C++ Zamanlanmış mesajları gönderme ve abone olma
.NET Zamanlanmış mesajları gönderme ve alma

HTTP

Dil Bağlantı
Java Zamanlanmış mesajları ve gecikmeli mesajları gönderme ve abone olma
Go Zamanlanmış mesajları ve gecikmeli mesajları gönderme ve abone olma
Python Zamanlanmış mesajları ve gecikmeli mesajları gönderme ve abone olma
Node.js Zamanlanmış mesajları ve gecikmeli mesajları gönderme ve abone olma
PHP Zamanlanmış mesajları ve gecikmeli mesajları gönderme ve abone olma
C# Zamanlanmış mesajları ve gecikmeli mesajları gönderme ve abone olma
C++ Zamanlanmış mesajları ve gecikmeli mesajları gönderme ve abone olma