Todos los productos
Search
Centro de documentos

ApsaraMQ for RocketMQ:Mensajes programados y mensajes retrasados

Última actualización: Sep 11, 2026

Tanto los mensajes programados como los retrasados aplazan la entrega a los consumidores. La diferencia radica en cómo se especifique el momento de envío:

  • Mensaje programado: usted especifique una marca de tiempo absoluta. El broker retiene el mensaje y lo entrega exactamente en ese instante.

  • Mensaje retrasado: usted especifique una duración relativa. El broker retiene el mensaje y lo entrega una vez que transcurre dicha duración desde el momento del envío.

El mecanismo subyacente es el mismo. El broker almacena el mensaje y lo libera a los consumidores cuando llega el momento indicado.

Casos de uso

  • Gestión del tiempo de espera de pedidos: cuando un usuario crea un pedido durante el proceso de pago en comercio electrónico, envíe un mensaje retrasado con 30 minutos de demora. Pasado ese tiempo, el consumidor comprueba si el pago se completó. Si no fue así, cancela el pedido; si el pago se procesó correctamente, ignora el mensaje.

  • Notificaciones temporizadas: envíe un mensaje programado para una hora específica —por ejemplo, las 9:00 a. m. del día siguiente— con el fin de activar una notificación push o un recordatorio.

Establezca el momento de entrega

Ambos tipos de mensajes utilizan el mismo parámetro: msg.setStartDeliverTime, el cual acepta una marca de tiempo Unix con precisión de milisegundos.

  • Mensaje programado: pase la marca de tiempo absoluta correspondiente al momento de entrega deseado.

  • Mensaje retrasado: pase System.currentTimeMillis() + delayMillis, donde delayMillis representa la duración del retraso en milisegundos.

Ejemplos de código

Retrase un mensaje 10 minutos a partir del momento actual:

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

Programe un mensaje para una fecha y hora específicas:

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

Reglas y límites

Regla

Detalles

Momento mínimo de entrega

Debe ser posterior a la marca de tiempo actual. Si la hora especificada ya pasó, el mensaje se entrega de inmediato.

Ventana máxima de programación

40 días a partir del momento actual. Los mensajes que superan esta ventana no se envían.

Unidad de tiempo

Milisegundos

Requisito de tipo de tema

El tema debe crearse con Message Type establecido en Scheduled/Delayed Message dentro de ApsaraMQ for RocketMQ console. Un tema solo admite mensajes que coincidan con su tipo configurado.

Retención de mensajes

Hasta 3 días. Por ejemplo, si un mensaje se programa para entregarse en 5 días y nadie lo consume, se elimina al octavo día (5 días de retraso + 3 días de retención).

Precisión de la entrega

Los mensajes programados y retrasados no garantizan llegar exactamente en el momento especificado debido a los siguientes factores:

  • Latencia base: espere entre 1 y 2 segundos de latencia en la entrega.

  • Acumulación de mensajes: si hay mensajes acumulados en la cola, los mensajes programados y retrasados se colocan detrás de ellos. En consecuencia, podrían llegar después del momento previsto.

  • Desfase de reloj: el valor de StartDeliverTime se evalúa con respecto al reloj del broker. Si el reloj del cliente difiere del reloj del broker, el momento real de entrega podría no coincidir con la marca de tiempo que estableció el productor.

Código de ejemplo

Para ver ejemplos completos de productores y consumidores, consulte a continuación las guías organizadas por protocolo y lenguaje.

TCP

Lenguaje

Enlace

Java

Send and receive scheduled messages

Java

Send and subscribe to delayed messages

C++

Send and subscribe to scheduled messages

.NET

Send and receive scheduled messages

HTTP

Lenguaje

Enlace

Java

Send and subscribe to scheduled messages and delayed messages

Go

Send and subscribe to scheduled messages and delayed messages

Python

Send and subscribe to scheduled messages and delayed messages

Node.js

Send and subscribe to scheduled messages and delayed messages

PHP

Send and subscribe to scheduled messages and delayed messages

C#

Send and subscribe to scheduled messages and delayed messages

C++

Send and subscribe to scheduled messages and delayed messages