Los mensajes normales en ApsaraMQ for RocketMQ no tienen semánticas de entrega especiales; se diferencian de los mensajes programados, diferidos, ordenados y transaccionales.
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:
Creado los recursos obligatorios (una instancia, un topic y un grupo de consumidores) en la consola de ApsaraMQ for RocketMQ
Creado un par de AccessKey para su cuenta de Alibaba Cloud
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 |
|
|
ID del grupo de productores |
Consola de ApsaraMQ for RocketMQ |
|
|
URL del endpoint TCP |
Sección TCP Endpoint en la página Instance Details |
|
|
Nombre del topic |
Consola de ApsaraMQ for RocketMQ |
|
|
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 |
|
Ejecute esta llamada una sola vez antes de enviar cualquier mensaje. |
|
Envío |
|
Si no se lanza ninguna excepción, el mensaje se envía correctamente. |
|
Cierre |
|
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.