Tous les produits
Search
Centre de documentation

ApsaraMQ for RocketMQ:Send and subscribe to scheduled messages

Dernière mise à jour :Aug 09, 2026

Les messages planifiés sont remis aux consommateurs uniquement après un horodatage spécifié, et non immédiatement. Cette rubrique explique comment envoyer et recevoir ce type de messages à l'aide du SDK client TCP pour C/C++.

Deux cas d'utilisation courants pour les messages planifiés :

  • Exécution différée de tâches : Annulez une commande impayée au bout de 30 minutes ou déclenchez une tâche de nettoyage périodique à une heure précise.

  • Traitement par fenêtre temporelle : Introduisez un délai contrôlé entre la production et la consommation du message, par exemple pour envoyer une notification de rappel 24 heures après l'inscription d'un utilisateur.

Pour comprendre les différences entre les messages planifiés et les messages différés, consultez la rubrique Messages planifiés et messages différés.

Prérequis

Avant de commencer, assurez-vous d'avoir :

Envoyer des messages planifiés

L'exemple suivant envoie un message planifié avec un délai de remise de 3 secondes. La méthode setStartDeliverTime accepte un horodatage absolu en millisecondes. Le broker conserve le message jusqu'à cet horodatage, puis le remet aux consommateurs.

#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;
}

Remplacez les espaces réservés XXX par vos valeurs réelles :

Espace réservé Description Où le trouver
ProducerId ID du groupe de consommateurs Console ApsaraMQ for RocketMQ console > votre instance > Consumer Groups
NAMESRV_ADDR Endpoint TCP Console ApsaraMQ for RocketMQ console > Instance Details > TCP Endpoint
PublishTopics Nom du topic Console ApsaraMQ for RocketMQ console > votre instance > Topics
MsgContent Contenu du corps du message Défini par votre application

Pour plus de détails sur les règles de formatage temporel et les limites associées à setStartDeliverTime, consultez la rubrique Messages planifiés et messages différés.

S'abonner à des messages planifiés

L'abonnement aux messages planifiés fonctionne exactement comme l'abonnement aux messages classiques. Aucune configuration supplémentaire n'est nécessaire côté consommateur.

Pour obtenir le code d'abonnement complet, consultez la rubrique S'abonner à des messages.

Voir aussi