Todos os produtos
Search
Central de documentação

ApsaraMQ for RocketMQ:Send and receive normal messages

Última atualização: Jun 27, 2026

As mensagens normais no ApsaraMQ for RocketMQ não possuem semântica especial de entrega e diferem das mensagens agendadas, atrasadas, ordenadas e transacionais.

Importante

Cada tópico suporta apenas um tipo de mensagem. Um tópico criado para mensagens normais não pode enviar ou receber outros tipos.

As seções a seguir mostram como enviar e receber mensagens normais com o SDK de cliente TCP para C/C++.

Pré-requisitos

Antes de começar, verifique se você:

Enviar mensagens normais

O exemplo abaixo cria um produtor, conecta-se ao broker e envia uma única mensagem normal.

Substitua os espaços reservados no código pelos valores reais:

Espaço reservado

Descrição

Onde encontrar

<your-group-id>

ID do grupo de produtores

Console do ApsaraMQ for RocketMQ

<your-tcp-endpoint>

URL do endpoint TCP

Seção TCP Endpoint na página Instance Details

<your-topic>

Nome do tópico

Console do ApsaraMQ for RocketMQ

<your-message-content>

Conteúdo do corpo da mensagem

Defina pelo aplicativo

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

Propriedades da mensagem

Propriedade

Detalhes

Tag

Classificador secundário em cada mensagem. Os consumidores usam tags para filtrar mensagens no broker e garantir a entrega apenas das relevantes.

Key

Identificador de negócio (como um ID de pedido), idealmente globalmente único. Use-o para consultar mensagens específicas no console do ApsaraMQ for RocketMQ. A definição da chave é opcional; é possível enviar e receber mensagens sem ela.

Body

Payload da mensagem. O ApsaraMQ for RocketMQ não processa nem analisa o corpo. Produtor e consumidor devem concordar quanto ao formato de serialização e desserialização. O corpo não pode estar vazio.

Ciclo de vida do produtor

Fase

Método

Observações

Iniciar

pProducer->start()

Chame uma vez antes de enviar qualquer mensagem.

Enviar

pProducer->send(msg)

Se nenhuma exceção for lançada, a mensagem será enviada.

Encerrar

pProducer->shutdown()

Execute antes de finalizar o aplicativo. Ignorar esta etapa pode causar problemas como vazamentos de memória.

Inscrever-se em mensagens normais

Para configurar o consumidor e obter códigos de exemplo com o SDK de cliente TCP para C/C++, consulte Inscrever-se em mensagens.