As mensagens normais no ApsaraMQ for RocketMQ não possuem semântica especial de entrega e diferem das mensagens agendadas, atrasadas, ordenadas e transacionais.
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ê:
Crie os recursos necessários — uma instância, um tópico e um grupo de consumidores — no console do ApsaraMQ for RocketMQ
Crie um par de AccessKey para sua conta Alibaba Cloud
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 |
|
|
ID do grupo de produtores |
Console do ApsaraMQ for RocketMQ |
|
|
URL do endpoint TCP |
Seção TCP Endpoint na página Instance Details |
|
|
Nome do tópico |
Console do ApsaraMQ for RocketMQ |
|
|
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 |
|
Chame uma vez antes de enviar qualquer mensagem. |
|
Enviar |
|
Se nenhuma exceção for lançada, a mensagem será enviada. |
|
Encerrar |
|
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.