Escritura de código para enviar y recibir mensajes mediante una cola
Las aplicaciones distribuidas usan colas de Service Bus como ubicaciones de almacenamiento temporal para los mensajes pendientes de entrega a un componente de destino. Para enviar y recibir mensajes a través de una cola, debe escribir el código en los componentes de origen y destino.
Piense en la aplicación de Contoso Bicycles. El cliente puede realizar un pedido a través de un sitio web o una aplicación móvil. Como los sitios web y las aplicaciones móviles se ejecutan en dispositivos de cliente, no hay ningún límite real para el número de pedidos que se pueden realizar a la vez. Al hacer que la aplicación móvil y el sitio web depositen los pedidos en una cola de Service Bus, el componente de back-end (una aplicación web) puede procesar los pedidos desde esa cola a su propio ritmo.
La aplicación de Contoso Bicycles en realidad tiene varios pasos para controlar un nuevo pedido. Todos los pasos dependen de la autorización previa del pago; por tanto, decide utilizar una cola. El primer trabajo del componente receptor es procesar el pago.
En la aplicación móvil y el sitio web, Contoso necesita escribir código que agregue un mensaje a la cola. En la aplicación web de back-end, Contoso escribe el código que extrae los mensajes de la cola.
Aquí, verá el proceso y las consideraciones al escribir código para enviar y recibir mensajes mediante una cola de Service Bus.
Paquete NuGet Azure.Messaging.ServiceBus
Para facilitar la escritura de código que envía y recibe mensajes mediante Service Bus, Microsoft proporciona una biblioteca de clases .NET. Puede usarla en cualquier lenguaje .NET para interactuar con una cola o tema de Service Bus. Puede incluir esta biblioteca en la aplicación si agrega el paquete NuGet Azure.Messaging.ServiceBus.
Cadenas y claves de conexión
Los componentes de origen y los de destino necesitan dos fragmentos de información para conectarse a una cola en un espacio de nombres de Service Bus:
- La ubicación del espacio de nombres de Service Bus, también conocida como punto de conexión: La ubicación se especifica como un nombre de dominio completo dentro del dominio servicebus.windows.net. Por ejemplo: bicycleService.servicebus.windows.net.
- Una clave de acceso: Service Bus restringe el acceso a colas o temas al requerir una clave de acceso válida.
Ambos fragmentos de información se proporcionan en el objeto ServiceBusClient en forma de una cadena de conexión. Puede obtener la cadena de conexión correcta para el espacio de nombres desde Azure Portal.
Llamada a métodos de forma asincrónica
La cola de Azure puede estar ubicada a miles de millas de distancia de los componentes de envío y recepción. Incluso si está físicamente cerca, las conexiones lentas y la limitación del ancho de banda pueden causar retrasos cuando un componente llama a un método en la cola. Por este motivo, la biblioteca de cliente de Service Bus pone a su disposición métodos async
para interactuar con las colas. Usaremos estos métodos para evitar que un subproceso se bloquee mientras se espera que las llamadas se completen.
Cuando envíe un mensaje a una cola, por ejemplo, use el método SendMessageAsync con la palabra clave await
.
Para enviar un mensaje a una cola
Para enviar un mensaje a una cola, completará los pasos siguientes.
En cualquier componente de envío o recepción, agregue las instrucciones using
siguientes a todos los archivos de código que llamen a una cola de Service Bus.
using System.Threading;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
A continuación, cree un objeto ServiceBusClient
y pásele la cadena de conexión y el nombre de la cola.
// Create a ServiceBusClient object using the connection string to the namespace.
await using var client = new ServiceBusClient(connectionString);
// Create a ServiceBusSender object by invoking the CreateSender method on the ServiceBusClient object, and specifying the queue name.
ServiceBusSender sender = client.CreateSender(queueName);
Para enviar un mensaje a la cola, llame al método ServiceBusSender.SendMessageAsync()
y pase el objeto ServiceBusMessage
.
// Create a new message to send to the queue.
string messageContent = "Order new crankshaft for eBike.";
var message = new ServiceBusMessage(messageContent);
// Send the message to the queue.
await sender.SendMessageAsync(message);
Para recibir mensajes de una cola
Para recibir mensajes, primero debe registrar un controlador de mensajes. El controlador de mensajes es el método del código que se invoca cuando hay un mensaje disponible en la cola.
// Create a ServiceBusProcessor for the queue.
await using ServiceBusProcessor processor = client.CreateProcessor(queueName, options);
// Specify handler methods for messages and errors.
processor.ProcessMessageAsync += MessageHandler;
processor.ProcessErrorAsync += ErrorHandler;
Realice las tareas de procesamiento. Después, en el controlador de mensajes, llame al método ProcessMessageEventArgs.CompleteMessageAsync()
para quitar el mensaje de la cola.
await args.CompleteMessageAsync(args.Message);