As mensagens normais são o tipo básico de mensagem no ApsaraMQ for RocketMQ. Diferentemente das mensagens agendadas, atrasadas, ordenadas e transacionais, elas não possuem semântica especial de entrega ou ordenação. Utilize mensagens normais para comunicação assíncrona confiável sem restrições de tempo ou sequência.
Os exemplos nesta página usam o SDK de cliente TCP para .NET.
Pré-requisitos
Antes de começar, verifique se você tem:
O SDK para .NET instalado. Para mais informações, consulte Notas de versão
Um ambiente de desenvolvimento preparado. Para mais detalhes, consulte Preparar o ambiente
Recursos do ApsaraMQ for RocketMQ (instâncias, tópicos e grupos de consumidores) criados no console. Para mais informações, consulte Criar recursos
Um par de AccessKey para sua conta Alibaba Cloud. Para mais informações, consulte Criar um par de AccessKey
Enviar mensagens normais
Para obter o projeto de exemplo completo, consulte o repositório de código do ApsaraMQ for RocketMQ.
O exemplo a seguir envia mensagens normais usando o SDK de cliente TCP para .NET. Substitua os espaços reservados pelos valores reais.
using System;
using ons;
public class ProducerExampleForEx
{
public ProducerExampleForEx()
{
}
static void Main(string[] args) {
// Configure the producer properties.
ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
// Load credentials from environment variables.
// Set ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET
// before running this example.
factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Specify the Group ID created in the ApsaraMQ for RocketMQ console.
factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "<GROUP_ID>");
// Specify the topic created in the ApsaraMQ for RocketMQ console.
factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "<TOPIC>");
// Specify the TCP endpoint from the Instance Details page
// in the ApsaraMQ for RocketMQ console.
factoryInfo.setFactoryProperty(ONSFactoryProperty.NAMESRV_ADDR, "<TCP_ENDPOINT>");
// Specify the log file path.
factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");
// Create a producer instance.
// Producer instances are thread-safe. A single instance can send
// messages to multiple topics. In most cases, one instance per thread is sufficient.
Producer producer = ONSFactory.getInstance().createProducer(factoryInfo);
// Start the producer.
producer.start();
// Build a message with a topic, tag, and body.
Message msg = new Message(factoryInfo.getPublishTopics(), "tagA", "Example message body");
msg.setKey(Guid.NewGuid().ToString());
// Send 32 messages in a loop.
for (int i = 0; i < 32; i++) {
try
{
SendResultONS sendResult = producer.send(msg);
Console.WriteLine("send success {0}", sendResult.getMessageId());
}
catch (Exception ex)
{
Console.WriteLine("send failure{0}", ex.ToString());
}
}
// Shut down the producer before exiting the thread.
producer.shutdown();
}
}
Substitua os seguintes espaços reservados pelos valores reais:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
O Group ID criado no console do ApsaraMQ for RocketMQ |
|
|
|
O tópico criado no console do ApsaraMQ for RocketMQ |
|
|
|
O endpoint TCP na seção TCP Endpoint da página Instance Details |
-- |
Explicação do código
Configurar propriedades: defina credenciais, Group ID, tópico, endpoint TCP e caminho de log por meio de
ONSFactoryProperty. Carregue o AccessKey ID e o AccessKey Secret das variáveis de ambienteALIBABA_CLOUD_ACCESS_KEY_IDeALIBABA_CLOUD_ACCESS_KEY_SECRET.Criar e iniciar o produtor:
ONSFactory.getInstance().createProducer(factoryInfo)retorna uma instância de produtor segura para threads. Na maioria dos casos, uma instância por thread é suficiente, mesmo ao enviar mensagens para vários tópicos.Construir e enviar mensagens: crie um objeto
Messagecom tópico, tag e corpo. Atribua uma chave exclusiva comGuid.NewGuid()para rastrear a mensagem.producer.send(msg)retorna um objetoSendResultONScom o ID da mensagem em caso de sucesso.Encerrar: execute
producer.shutdown()antes de sair da thread para finalizar a instância do produtor.
Inscrever-se em mensagens normais
Para obter instruções e códigos de exemplo sobre como se inscrever em mensagens normais com o SDK de cliente TCP para .NET, consulte Inscrever-se em mensagens.
Próximos passos
Inscrever-se em mensagens: configure um consumidor para receber mensagens usando o SDK de cliente TCP para .NET.
Consulte outros tipos de mensagem na Referência do Desenvolvedor: mensagens agendadas, atrasadas, ordenadas e transacionais oferecem diferentes semânticas de entrega.