Tous les produits
Search
Centre de documentation

ApsaraMQ for RocketMQ:Scheduled messages and delayed messages

Dernière mise à jour :Aug 09, 2026

Les messages planifiés et les messages différés retardent tous deux la remise aux consommateurs. La différence réside dans la manière dont vous spécifiez le moment de la livraison :

  • Message planifié : vous indiquez un horodatage absolu. Le broker conserve le message et le livre exactement à l'heure indiquée.

  • Message différé : vous indiquez une durée relative. Le broker conserve le message et le livre après l'écoulement de cette durée à partir du moment de l'envoi.

Le mécanisme sous-jacent est identique. Le broker stocke le message et le libère vers les consommateurs lorsque l'heure cible est atteinte.

Cas d'utilisation

  • Gestion des délais d'expiration des commandes : lorsqu'un utilisateur passe une commande lors du processus de paiement d'une boutique en ligne, envoyez un message différé avec un délai de 30 minutes. Au bout de 30 minutes, le consommateur vérifie si le paiement a été effectué. Si ce n'est pas le cas, il annule la commande. Si le paiement a réussi, il ignore le message.

  • Notifications programmées : envoyez un message planifié défini à une heure précise, par exemple à 9 h 00 le lendemain, pour déclencher une notification push ou un rappel.

Définir l'heure de livraison

Les deux types de messages utilisent le même paramètre : msg.setStartDeliverTime, qui accepte un horodatage Unix avec une précision en millisecondes.

  • Message planifié : transmettez l'horodatage absolu correspondant à l'heure de livraison cible.

  • Message différé : transmettez System.currentTimeMillis() + delayMillis, où delayMillis représente la durée du délai en millisecondes.

Exemples de code

Différer un message de 10 minutes à partir de maintenant :

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

Planifier un message pour une date et une heure spécifiques :

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

Règles et limites

Règle Détails
Heure de livraison minimale Doit être postérieure à l'horodatage actuel. Si l'heure spécifiée est dans le passé, le message est livré immédiatement.
Fenêtre de planification maximale 40 jours à partir de l'heure actuelle. L'envoi des messages dépassant cette fenêtre échoue.
Unité de temps Millisecondes
Exigence de type de topic Le topic doit être créé avec l'option Message Type définie sur Scheduled/Delayed Message dans la console ApsaraMQ for RocketMQ. Un topic n'accepte que les messages correspondant à son type configuré.
Rétention des messages Jusqu'à 3 jours. Par exemple, si un message est planifié pour être livré dans 5 jours et n'est pas consommé, il est supprimé le 8e jour (délai de 5 jours + rétention de 3 jours).

Précision de la livraison

La livraison des messages planifiés et différés n'est pas garantie à l'heure exacte spécifiée en raison des facteurs suivants :

  • Latence de base : prévoyez une latence de livraison de 1 à 2 secondes.

  • Arriéré de messages : si des messages s'accumulent dans la file d'attente, les messages planifiés et différés sont mis en file derrière eux et peuvent arriver plus tard que l'heure cible.

  • Décalage d'horloge : la valeur StartDeliverTime est évaluée par rapport à l'horloge du broker. Si l'horloge du client diffère de celle du broker, l'heure réelle de livraison peut ne pas correspondre à l'horodatage défini par le producteur.

Exemples de code

Pour des exemples complets de producteurs et de consommateurs, consultez les guides suivants organisés par protocole et langage.

TCP

Langage Lien
Java Envoyer et recevoir des messages planifiés
Java Envoyer et s'abonner à des messages différés
C++ Envoyer et s'abonner à des messages planifiés
.NET Envoyer et recevoir des messages planifiés

HTTP

Langage Lien
Java Envoyer et s'abonner à des messages planifiés et différés
Go Envoyer et s'abonner à des messages planifiés et différés
Python Envoyer et s'abonner à des messages planifiés et différés
Node.js Envoyer et s'abonner à des messages planifiés et différés
PHP Envoyer et s'abonner à des messages planifiés et différés
C# Envoyer et s'abonner à des messages planifiés et différés
C++ Envoyer et s'abonner à des messages planifiés et différés