Todos los productos
Search
Centro de documentos

ApsaraMQ for RocketMQ:Envío y recepción de mensajes normales

Última actualización: Sep 05, 2026

Los mensajes normales en ApsaraMQ for RocketMQ no tienen semánticas de entrega especiales; se diferencian de los mensajes programados, diferidos, ordenados y transaccionales.

Importante

Cada topic admite un solo tipo de mensaje. Un topic creado para mensajes normales no puede enviar ni recibir otros tipos de mensajes.

A continuación se describen cómo enviar y recibir mensajes normales mediante el SDK de cliente TCP para C/C++.

Requisitos previos

Antes de empezar, asegúrese de haber completado lo siguiente:

Envío de mensajes normales

El siguiente ejemplo crea un productor, se conecta al broker y envía un único mensaje normal.

Reemplace los marcadores de posición del código con sus valores reales:

Marcador de posición

Descripción

Dónde encontrarlo

<your-group-id>

ID del grupo de productores

Consola de ApsaraMQ for RocketMQ

<your-tcp-endpoint>

URL del endpoint TCP

Sección TCP Endpoint en la página Instance Details

<your-topic>

Nombre del topic

Consola de ApsaraMQ for RocketMQ

<your-message-content>

Contenido del cuerpo del mensaje

Definido por su aplicación

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

Propiedades del mensaje

Propiedad

Detalles

Tag

Clasificador secundario de cada mensaje. Los consumidores usan las etiquetas para filtrar mensajes en el broker, de modo que solo se entregan los relevantes.

Key

Identificador de negocio (como un ID de pedido) que debe ser único a nivel global siempre que sea posible. Úselo para consultar mensajes específicos en la consola de ApsaraMQ for RocketMQ. Establecer una clave es opcional; los mensajes pueden enviarse y recibirse sin ella.

Body

La carga útil del mensaje. ApsaraMQ for RocketMQ no procesa ni analiza sintácticamente el cuerpo. El productor y el consumidor deben acordar el formato de serialización y deserialización. El cuerpo no puede estar vacío.

Ciclo de vida del productor

Fase

Método

Notas

Inicio

pProducer->start()

Ejecute esta llamada una sola vez antes de enviar cualquier mensaje.

Envío

pProducer->send(msg)

Si no se lanza ninguna excepción, el mensaje se envía correctamente.

Cierre

pProducer->shutdown()

Ejecute esta llamada antes de que la aplicación finalice. Omitir este paso puede causar problemas como fugas de memoria.

Suscripción a mensajes normales

Para obtener información sobre la configuración del consumidor y el código de ejemplo con el SDK de cliente TCP para C/C++, consulte Subscribe to messages.