Todos los productos
Search
Centro de documentos

ApsaraMQ for RocketMQ:Envío y suscripción a mensajes programados

Última actualización: Sep 04, 2026

Los mensajes programados se entregan a los consumidores únicamente después de una marca de tiempo específica, en lugar de hacerlo de inmediato. Este tema explica cómo enviar y suscribirse a mensajes programados mediante el SDK de cliente TCP para C/C++.

Dos casos de uso comunes de los mensajes programados:

  • Ejecución diferida de tareas: cancele un pedido no pagado después de 30 minutos o active un trabajo de limpieza periódica a una hora determinada.

  • Procesamiento por ventana de tiempo: introduzca un retraso controlado entre la producción y el consumo de mensajes; por ejemplo, envíe una notificación de recordatorio 24 horas después del registro de un usuario.

Para obtener contexto sobre las diferencias entre los mensajes programados y los mensajes con retraso, consulte Scheduled messages and delayed messages.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

Envío de mensajes programados

A continuación, se muestra un ejemplo que envía un mensaje programado con un retraso de entrega de 3 segundos. El método setStartDeliverTime acepta una marca de tiempo absoluta en milisegundos. El broker retiene el mensaje hasta que se alcanza dicha marca de tiempo y luego lo entrega a los consumidores.

#include "ONSFactory.h"
#include "ONSClientException.h"

#include <windows.h>
using namespace ons;
int main()
{

    // Create the producer and set the required properties.
    ONSFactoryProperty factoryInfo;
    // The ID of the consumer group that you created in the ApsaraMQ for RocketMQ console.
    factoryInfo.setFactoryProperty(ONSFactoryProperty::ProducerId, "XXX");
    // The TCP endpoint. Find this in the TCP Endpoint section of the Instance Details page in the ApsaraMQ for RocketMQ console.
    factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "XXX");
    // The topic that you created in the ApsaraMQ for RocketMQ console.
    factoryInfo.setFactoryProperty(ONSFactoryProperty::PublishTopics,"XXX" );
    // The message content.
    factoryInfo.setFactoryProperty(ONSFactoryProperty::MsgContent, "XXX");
    // Make sure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
    // AccessKey ID for authentication.
    factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
    // AccessKey secret for authentication.
    factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));

    // Create the producer.
    Producer *pProducer = ONSFactory::getInstance()->createProducer(factoryInfo);

    // Call start() once before sending messages.
    pProducer->start();

    Message msg(
            // Message topic.
            factoryInfo.getPublishTopics(),
            // Message tag, used by consumers to filter messages on the broker.
            "TagA",
            // Message body. Must not be empty. The producer and consumer must agree on the serialization and deserialization methods.
            factoryInfo.getMessageContent()
    );

    // The message key is a business-specific identifier. Keep it globally unique
    // so you can query the message by key in the ApsaraMQ for RocketMQ console.
    // Setting a key is optional.
    msg.setKey("ORDERID_100");

    // Set the delivery time as an absolute timestamp in milliseconds.
    // The broker delivers the message to consumers only after this time.
    // In this example, the message is delivered 3 seconds from now.
    long deliverTime = GetTickCount64() + 3000;
    msg.setStartDeliverTime(deliverTime);

    // Send the message. If no exception is thrown, the send succeeded.
    try
    {
        SendResultONS sendResult = pProducer->send(msg);
    }
    catch(ONSClientException & e)
    {
        // Handle the exception.
    }

    // Shut down the producer before exiting to avoid memory leaks.
    pProducer->shutdown();

    return 0;
}

Reemplace los marcadores de posición XXX con sus valores reales:

Marcador de posición

Descripción

Dónde encontrarlo

ProducerId

ID del grupo de consumidores

ApsaraMQ for RocketMQ console > su instancia > Consumer Groups

NAMESRV_ADDR

Endpoint TCP

ApsaraMQ for RocketMQ console > Instance Details > TCP Endpoint

PublishTopics

Nombre del tema

ApsaraMQ for RocketMQ console > su instancia > Topics

MsgContent

Contenido del cuerpo del mensaje

Definido por su aplicación

Para obtener detalles sobre las reglas de formato de tiempo y los límites de setStartDeliverTime, consulte Scheduled messages and delayed messages.

Suscripción a mensajes programados

La suscripción a mensajes programados funciona igual que la suscripción a mensajes normales. No se requiere configuración adicional en el lado del consumidor.

Para consultar el código completo de suscripción, véase Subscribe to messages.

Consulte también