Écriture de code permettant d’envoyer et de recevoir des messages à l’aide d’une file d’attente

Effectué

Les applications distribuées utilisent des files d’attente Service Bus comme emplacements de stockage temporaire pour les messages en attente de remise à un composant de destination. Pour envoyer et recevoir des messages par le biais d’une file d’attente, vous devez écrire le code à la fois dans les composants source et de destination.

Considérez l’application Contoso Bicycles. Le client peut passer une commande par le biais d’un site web ou d’une application mobile. Étant donné que les sites web et les applications mobiles s’exécutent sur des appareils clients, il n’existe aucune limite quant au nombre de commandes pouvant être passées simultanément. Comme l’application mobile et le site web déposent les commandes dans la file d’attente Service Bus, le composant back-end (une application web) peut traiter les commandes de cette file d’attente à son propre rythme.

L’application Contoso Bicycles comprend actuellement plusieurs étapes pour gérer une nouvelle commande. Toutes les étapes dépendent en premier lieu de l’autorisation de paiement. Vous décidez donc d’utiliser une file d’attente. La première tâche du composant de réception consiste à traiter le paiement.

Dans l’application mobile et sur le site web, Contoso a besoin d’écrire du code qui ajoute un message à la file d’attente. Dans l’application web back-end, Contoso écrit du code qui récupère les messages dans la file d’attente.

Vous allez examiner le processus et les points à prendre en compte pour écrire du code permettant d’envoyer et de recevoir des messages à l’aide d’une file d’attente Service Bus.

Package NuGet Azure.Messaging.ServiceBus

Pour simplifier l’écriture de code qui envoie et reçoit des messages par le biais de Service Bus, Microsoft fournit une bibliothèque de classes .NET. Vous pouvez utiliser dans n’importe quel langage .NET pour interagir avec une file d’attente ou une rubrique Service Bus. Vous pouvez inclure cette bibliothèque dans votre application en ajoutant le package NuGet Azure.Messaging.ServiceBus.

Chaînes de connexion et clés

Les composants source et les composants de destination ont besoin de deux éléments d’information pour se connecter à une file d’attente dans un espace de noms Service Bus :

  • L’emplacement de l’espace de noms Service Bus, également appelé point de terminaison : L’emplacement est indiqué comme nom de domaine complet dans le domaine servicebus.windows.net. Par exemple : bicycleService.servicebus.windows.net.
  • Une clé d’accès : Service Bus limite l’accès aux files d’attente ou aux rubriques en demandant une clé d’accès valide.

Ces deux informations sont fournies à l’objet ServiceBusClient sous la forme d’une chaîne de connexion. Vous pouvez récupérer la chaîne de connexion de votre espace de noms sur le Portail Azure.

Appeler des méthodes de manière asynchrone

La file d’attente proposée dans Azure peut être située à des milliers de kilomètres des composants d’envoi et de réception. Même en cas de proximité physique, les connexions lentes et la contention de bande passante peuvent entraîner des retards quand un composant appelle une méthode sur la file d’attente. Pour cette raison, la bibliothèque de client Service Bus rend les méthodes async disponibles pour interagir avec des files d’attente. Nous allons utiliser ces méthodes pour éviter de bloquer un thread en attendant la fin des appels.

Quand, par exemple, vous envoyez un message à une file d’attente, utilisez la méthode SendMessageAsync avec le mot clé await.

Envoi d’un message à une file d’attente

Procédez comme suit pour envoyer un message à une file d’attente.

Dans n’importe quel composant d’envoi ou de réception, ajoutez les instructions using suivantes à tous les fichiers de code qui appellent une file d’attente Service Bus.

using System.Threading;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;

Créez ensuite un objet ServiceBusClient et passez-lui la chaîne de connexion et le nom de la file d’attente.

// 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);

Pour envoyer un message à la file d’attente, appelez la méthode ServiceBusSender.SendMessageAsync() et passez un 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);

Réception de messages provenant d’une file d’attente

Pour pouvoir recevoir des messages, vous devez d’abord enregistrer un gestionnaire de messages. Il s’agit de la méthode qui est appelée dans votre code lorsqu’un message est disponible dans la file d’attente.

// 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;

Effectuez votre travail de traitement. Ensuite, dans le gestionnaire de messages, appelez la méthode ProcessMessageEventArgs.CompleteMessageAsync() pour supprimer le message de la file d’attente.

await args.CompleteMessageAsync(args.Message);