Todos os produtos
Search
Central de documentação

ApsaraMQ for RocketMQ:Send and subscribe to scheduled messages

Última atualização: Jun 27, 2026

As mensagens agendadas são entregues aos consumidores apenas após um timestamp especificado, e não imediatamente. Este tópico demonstra como enviar e assinar mensagens agendadas com o SDK de cliente TCP para C/C++.

Casos de uso comuns de mensagens agendadas:

  • Execução de tarefas atrasadas: cancele um pedido não pago após 30 minutos ou acionar um trabalho de limpeza periódica em um horário específico.

  • Processamento com janela de tempo: introduzir um atraso controlado entre a produção e o consumo da mensagem — por exemplo, enviar uma notificação de lembrete 24 horas após o registro do usuário.

Para entender as diferenças entre mensagens agendadas e atrasadas, consulte Mensagens agendadas e mensagens atrasadas.

Pré-requisitos

Antes de começar, verifique se você tem:

Enviar mensagens agendadas

O exemplo a seguir envia uma mensagem agendada com atraso de entrega de 3 segundos. O método setStartDeliverTime aceita um timestamp absoluto em milissegundos. O broker retém a mensagem até esse momento e depois a entrega aos 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;
}

Substitua os espaços reservados XXX pelos valores reais:

Espaço reservado

Descrição

Onde encontrar

ProducerId

ID do grupo de consumidores

ApsaraMQ for RocketMQ console > sua instância > Consumer Groups

NAMESRV_ADDR

Endpoint TCP

ApsaraMQ for RocketMQ console > Instance Details > TCP Endpoint

PublishTopics

Nome do tópico

ApsaraMQ for RocketMQ console > sua instância > Topics

MsgContent

Conteúdo do corpo da mensagem

Definido pela sua aplicação

Para obter detalhes sobre regras de formato de hora e limites do método setStartDeliverTime, consulte Mensagens agendadas e mensagens atrasadas.

Assinar mensagens agendadas

A assinatura de mensagens agendadas funciona exatamente como a de mensagens normais. Não é necessária nenhuma configuração adicional no lado do consumidor.

Para ver o código completo de assinatura, consulte Assinar mensagens.

Veja também