Los mensajes normales son el tipo básico de mensaje en ApsaraMQ for RocketMQ. A diferencia de los mensajes programados, diferidos, ordenados y transaccionales, los mensajes normales no tienen semánticas especiales de entrega ni ordenamiento. Utilice mensajes normales para la comunicación asíncrona confiable que no requiere restricciones de tiempo ni secuencia.
Los ejemplos de esta página usan el SDK de cliente TCP para .NET.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
El SDK para .NET instalado. Para obtener más información, consulte Notas de versión.
Un entorno de desarrollo preparado. Para obtener más información, consulte Preparar el entorno.
Recursos de ApsaraMQ for RocketMQ (instancias, temas y grupos de consumidores) creados en la consola. Para obtener más información, consulte Crear recursos.
Un par de AccessKey para su cuenta de Alibaba Cloud. Para obtener más información, consulte Crear un par de AccessKey.
Enviar mensajes normales
Para consultar el proyecto de ejemplo completo, visite el repositorio de código de ApsaraMQ for RocketMQ.
El siguiente ejemplo envía mensajes normales mediante el SDK de cliente TCP para .NET. Reemplace los marcadores de posición con sus valores reales.
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();
}
}
Reemplace los siguientes marcadores de posición con sus valores reales:
|
Marcador de posición |
Descripción |
Ejemplo |
|
|
El identificador de grupo que creó en la consola de ApsaraMQ for RocketMQ |
|
|
|
El tema que creó en la consola de ApsaraMQ for RocketMQ |
|
|
|
El endpoint TCP de la sección TCP Endpoint en la página Instance Details |
-- |
Explicación del código
Configurar propiedades: establezca las credenciales, el identificador de grupo, el tema, el endpoint TCP y la ruta del archivo de registro mediante
ONSFactoryProperty. Cargue el AccessKey ID y el AccessKey Secret desde las variables de entornoALIBABA_CLOUD_ACCESS_KEY_IDyALIBABA_CLOUD_ACCESS_KEY_SECRET.Crear e iniciar el productor:
ONSFactory.getInstance().createProducer(factoryInfo)devuelve una instancia de productor segura para hilos. En la mayoría de los casos, basta con una instancia por hilo, incluso al enviar mensajes a varios temas.Construir y enviar mensajes: construya un objeto
Messagecon un tema, una etiqueta y un cuerpo. Asigne una clave única conGuid.NewGuid()para rastrear el mensaje.producer.send(msg)devuelve un objetoSendResultONSque contiene el identificador del mensaje si el envío es exitoso.Finalizar: invoque
producer.shutdown()antes de que termine el hilo para cerrar la instancia del productor.
Suscripción a mensajes normales
Para consultar las instrucciones y el código de ejemplo sobre cómo suscribirse a mensajes normales con el SDK de cliente TCP para .NET, consulte Subscribe to messages.
Pasos siguientes
Suscribirse a mensajes: configure un consumidor para recibir mensajes mediante el SDK de cliente TCP para .NET.
Explore otros tipos de mensajes en la referencia para desarrolladores: los mensajes programados, diferidos, ordenados y transaccionales admiten distintas semánticas de entrega.