Tous les produits
Search
Centre de documentation

ApsaraMQ for RocketMQ:Send and receive normal messages

Dernière mise à jour :Aug 09, 2026

Les messages normaux dans ApsaraMQ for RocketMQ ne disposent d'aucune sémantique de distribution particulière. Ils se distinguent des messages planifiés, différés, ordonnés et transactionnels.

Important

Chaque topic prend en charge un seul type de message. Un topic créé pour les messages normaux ne peut ni envoyer ni recevoir d'autres types de messages.

Les sections suivantes expliquent comment envoyer et recevoir des messages normaux à l'aide du SDK client TCP pour C/C++.

Prérequis

Avant de commencer, assurez-vous d'avoir :

Envoyer des messages normaux

L'exemple suivant crée un producteur, établit une connexion avec le broker et envoie un message normal unique.

Remplacez les espaces réservés dans le code par vos valeurs réelles :

Espace réservé Description Où le trouver
<your-group-id> ID du groupe de producteurs Console ApsaraMQ for RocketMQ
<your-tcp-endpoint> URL de l'endpoint TCP Section TCP Endpoint sur la page Instance Details
<your-topic> Nom du topic Console ApsaraMQ for RocketMQ
<your-message-content> Contenu du corps du message Défini par votre application
#include "ONSFactory.h"
#include "ONSClientException.h"

using namespace ons;

int main()
{
    // Configure producer properties
    ONSFactoryProperty factoryInfo;
    factoryInfo.setFactoryProperty(ONSFactoryProperty::ProducerId, "<your-group-id>");
    factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "<your-tcp-endpoint>");
    factoryInfo.setFactoryProperty(ONSFactoryProperty::PublishTopics, "<your-topic>");
    factoryInfo.setFactoryProperty(ONSFactoryProperty::MsgContent, "<your-message-content>");

    // Load credentials from environment variables.
    // Make sure ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
    factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
    factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));

    // Create and start the producer.
    // Call start() exactly once before sending any messages.
    Producer *pProducer = ONSFactory::getInstance()->createProducer(factoryInfo);
    pProducer->start();

    // Build the message
    Message msg(
            factoryInfo.getPublishTopics(),  // Topic (must be a normal-message topic)
            "TagA",                          // Tag -- consumers use tags to filter messages
            factoryInfo.getMessageContent()  // Body -- cannot be empty
    );

    // Set a message key for traceability.
    // Keys must be globally unique whenever possible (for example, an order ID).
    // Use the key to look up messages in the ApsaraMQ for RocketMQ console.
    msg.setKey("ORDERID_100");

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

    // Shut down the producer before your application exits to prevent issues such as memory leaks.
    pProducer->shutdown();

    return 0;
}

Propriétés des messages

Propriété Détails
Tag Classificateur secondaire associé à chaque message. Les consommateurs utilisent les tags pour filtrer les messages côté broker, afin que seuls les messages pertinents soient distribués.
Key Identifiant métier (tel qu'un ID de commande) qui doit être globalement unique dans la mesure du possible. Utilisez-le pour interroger des messages spécifiques dans la console ApsaraMQ for RocketMQ. La définition d'une clé est facultative ; les messages peuvent être envoyés et reçus sans celle-ci.
Body Charge utile du message. ApsaraMQ for RocketMQ ne traite ni n'analyse le corps du message. Le producteur et le consommateur doivent convenir du format de sérialisation et de désérialisation. Le corps ne peut pas être vide.

Cycle de vie du producteur

Phase Méthode Notes
Démarrage pProducer->start() Appelez cette méthode une seule fois avant d'envoyer des messages.
Envoi pProducer->send(msg) Si aucune exception n'est levée, le message est envoyé.
Arrêt pProducer->shutdown() Appelez cette méthode avant la fin de l'application. Ignorer cette étape peut entraîner des problèmes tels que des fuites de mémoire.

S'abonner à des messages normaux

Pour la configuration du consommateur et l'exemple de code utilisant le SDK client TCP pour C/C++, consultez S'abonner à des messages.