

La version 4 (V4) du AWS SDK pour .NET est sortie \$1

Pour plus d'informations sur les modifications majeures et la migration de vos applications, consultez la [rubrique relative à la migration](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html).

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Messagerie à l'aide d'Amazon SQS
<a name="sqs-apis-intro"></a>

Il AWS SDK pour .NET prend en charge [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/)), un service de mise en file d'attente de messages qui gère les messages ou les flux de travail entre les composants d'un système.

Les files d'attente Amazon SQS fournissent un mécanisme qui vous permet d'envoyer, de stocker et de recevoir des messages entre des composants logiciels tels que des microservices, des systèmes distribués et des applications sans serveur. Cela vous permet de dissocier ces composants et vous évite de devoir concevoir et exploiter votre propre système de messagerie. Pour plus d'informations sur le fonctionnement des files d'attente et des messages dans Amazon SQS, consultez les didacticiels [Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-other-tutorials.html) et l'[architecture de base d'Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-architecture.html) dans le manuel [Amazon](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/) Simple Queue Service Developer Guide.

**Important**  
En raison de la nature distribuée des files d'attente, Amazon SQS ne peut garantir que vous recevrez les messages dans l'ordre précis dans lequel ils sont envoyés. Si vous devez préserver l'ordre des messages, utilisez une file d'attente [FIFO Amazon SQS.](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fifo-queues.html)

## APIs
<a name="w2aac19c15c29b9"></a>

Les AWS SDK pour .NET offres APIs pour les clients Amazon SQS. Ils vous APIs permettent de travailler avec les fonctionnalités d'Amazon SQS telles que les files d'attente et les messages. Cette section contient un petit nombre d'exemples qui vous montrent les modèles que vous pouvez suivre lorsque vous travaillez avec ces outils APIs. Pour voir l'ensemble complet de APIs, consultez la [référence de l'AWS SDK pour .NET API](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/) (et faites défiler la page jusqu'à « Amazon.sqs »).

Les Amazon SQS APIs sont fournis par le package [AWSSDK NuGet .SQS](https://www.nuget.org/packages/AWSSDK.SQS).

## Conditions préalables
<a name="w2aac19c15c29c11"></a>

Avant de commencer, assurez-vous d'avoir [configuré votre environnement](net-dg-config.md) [et votre projet](configuring-the-sdk.md). Consultez également les informations contenues dans[Utilisation de l'SDK](net-dg-sdk-features.md).

## Rubriques
<a name="w2aac19c15c29c13"></a>

**Topics**
+ [APIs](#w2aac19c15c29b9)
+ [Conditions préalables](#w2aac19c15c29c11)
+ [Rubriques](#w2aac19c15c29c13)
+ [Création de files d'attente](CreateQueue.md)
+ [Mise à jour des files d'attente](UpdateSqsQueue.md)
+ [Supprimer des files d'attente](DeleteSqsQueue.md)
+ [Envoi de messages](SendMessage.md)
+ [Réception de messages](ReceiveMessage.md)

# Création de files d'attente Amazon SQS
<a name="CreateQueue"></a>

Cet exemple vous montre comment utiliser le pour AWS SDK pour .NET créer une file d'attente Amazon SQS. L'application crée une [file d'attente contenant des lettres mortes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) si vous n'en fournissez pas l'ARN. Il crée ensuite une file de messages standard, qui inclut une file de lettres mortes (celle que vous avez fournie ou celle qui a été créée).

Si vous ne fournissez aucun argument de ligne de commande, l'application affiche simplement des informations sur toutes les files d'attente existantes.

Les sections suivantes fournissent des extraits de cet exemple. Le [code complet de l'exemple](#CreateQueue-complete-code) est affiché ensuite et peut être créé et exécuté tel quel.

**Topics**
+ [Afficher les files d'attente existantes](#CreateQueue-show-queues)
+ [Création de la file d'attente](#CreateQueue-create-queue)
+ [Obtenir l'ARN d'une file d'attente](#CreateQueue-get-arn)
+ [Code complet](#CreateQueue-complete-code)
+ [Considérations supplémentaires](#CreateQueue-additional)

## Afficher les files d'attente existantes
<a name="CreateQueue-show-queues"></a>

L'extrait suivant présente une liste des files d'attente existantes dans la région du client SQS et les attributs de chaque file d'attente.

L'exemple [à la fin de cette rubrique](#CreateQueue-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to show a list of the existing queues
    private static async Task ShowQueues(IAmazonSQS sqsClient)
    {
      ListQueuesResponse responseList = await sqsClient.ListQueuesAsync("");
      Console.WriteLine();
      foreach(string qUrl in responseList.QueueUrls)
      {
        // Get and show all attributes. Could also get a subset.
        await ShowAllAttributes(sqsClient, qUrl);
      }
    }

    //
    // Method to show all attributes of a queue
    private static async Task ShowAllAttributes(IAmazonSQS sqsClient, string qUrl)
    {
      var attributes = new List<string>{ QueueAttributeName.All };
      GetQueueAttributesResponse responseGetAtt =
        await sqsClient.GetQueueAttributesAsync(qUrl, attributes);
      Console.WriteLine($"Queue: {qUrl}");
      foreach(var att in responseGetAtt.Attributes)
        Console.WriteLine($"\t{att.Key}: {att.Value}");
    }
```

## Création de la file d'attente
<a name="CreateQueue-create-queue"></a>

L'extrait suivant crée une file d'attente. L'extrait inclut l'utilisation d'une file d'attente de lettres mortes, mais une file d'attente de lettres mortes n'est pas nécessairement requise pour vos files d'attente.

L'exemple [à la fin de cette rubrique](#CreateQueue-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to create a queue. Returns the queue URL.
    private static async Task<string> CreateQueue(
      IAmazonSQS sqsClient, string qName, string deadLetterQueueUrl=null,
      string maxReceiveCount=null, string receiveWaitTime=null)
    {
      var attrs = new Dictionary<string, string>();

      // If a dead-letter queue is given, create a message queue
      if(!string.IsNullOrEmpty(deadLetterQueueUrl))
      {
        attrs.Add(QueueAttributeName.ReceiveMessageWaitTimeSeconds, receiveWaitTime);
        attrs.Add(QueueAttributeName.RedrivePolicy,
          $"{{\"deadLetterTargetArn\":\"{await GetQueueArn(sqsClient, deadLetterQueueUrl)}\"," +
          $"\"maxReceiveCount\":\"{maxReceiveCount}\"}}");
        // Add other attributes for the message queue such as VisibilityTimeout
      }

      // If no dead-letter queue is given, create one of those instead
      //else
      //{
      //  // Add attributes for the dead-letter queue as needed
      //  attrs.Add();
      //}

      // Create the queue
      CreateQueueResponse responseCreate = await sqsClient.CreateQueueAsync(
          new CreateQueueRequest{QueueName = qName, Attributes = attrs});
      return responseCreate.QueueUrl;
    }
```

## Obtenir l'ARN d'une file d'attente
<a name="CreateQueue-get-arn"></a>

L'extrait suivant obtient l'ARN de la file d'attente identifiée par l'URL de file d'attente donnée.

L'exemple [à la fin de cette rubrique](#CreateQueue-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to get the ARN of a queue
    private static async Task<string> GetQueueArn(IAmazonSQS sqsClient, string qUrl)
    {
      GetQueueAttributesResponse responseGetAtt = await sqsClient.GetQueueAttributesAsync(
        qUrl, new List<string>{QueueAttributeName.QueueArn});
      return responseGetAtt.QueueARN;
    }
```

## Code complet
<a name="CreateQueue-complete-code"></a>

Cette section présente les références pertinentes et le code complet de cet exemple.

### Références du SDK
<a name="w2aac19c15c29c17c25b5b1"></a>

NuGet colis :
+ [AWSSDK.SQS](https://www.nuget.org/packages/AWSSDK.SQS)

Éléments de programmation :
+ [Espace de noms Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

  Classe [Amazon SQSClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSClient.html)

  Classe [QueueAttributeName](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TQueueAttributeName.html)
+ [Espace de noms Amazon.SQS.Model](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQSModel.html)

  Classe [CreateQueueRequest](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TCreateQueueRequest.html)

  Classe [CreateQueueResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TCreateQueueResponse.html)

  Classe [GetQueueAttributesResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TGetQueueAttributesResponse.html)

  Classe [ListQueuesResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TListQueuesResponse.html)

### Le code
<a name="w2aac19c15c29c17c25b7b1"></a>

```
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using Amazon.SQS;
using Amazon.SQS.Model;

namespace SQSCreateQueue
{
  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class to create a queue
  class Program
  {
    private const string MaxReceiveCount = "10";
    private const string ReceiveMessageWaitTime = "2";
    private const int MaxArgs = 3;

    static async Task Main(string[] args)
    {
      // Parse the command line and show help if necessary
      var parsedArgs = CommandLine.Parse(args);
      if(parsedArgs.Count > MaxArgs)
        CommandLine.ErrorExit(
          "\nToo many command-line arguments.\nRun the command with no arguments to see help.");

      // Create the Amazon SQS client
      var sqsClient = new AmazonSQSClient();

      // In the case of no command-line arguments, just show help and the existing queues
      if(parsedArgs.Count == 0)
      {
        PrintHelp();
        Console.WriteLine("\nNo arguments specified.");
        Console.Write("Do you want to see a list of the existing queues? ((y) or n): ");
        string response = Console.ReadLine();
        if((string.IsNullOrEmpty(response)) || (response.ToLower() == "y"))
          await ShowQueues(sqsClient);
        return;
      }

      // Get the application arguments from the parsed list
      string queueName =
        CommandLine.GetArgument(parsedArgs, null, "-q", "--queue-name");
      string deadLetterQueueUrl =
        CommandLine.GetArgument(parsedArgs, null, "-d", "--dead-letter-queue");
      string maxReceiveCount =
        CommandLine.GetArgument(parsedArgs, MaxReceiveCount, "-m", "--max-receive-count");
      string receiveWaitTime =
        CommandLine.GetArgument(parsedArgs, ReceiveMessageWaitTime, "-w", "--wait-time");

      if(string.IsNullOrEmpty(queueName))
        CommandLine.ErrorExit(
          "\nYou must supply a queue name.\nRun the command with no arguments to see help.");

      // If a dead-letter queue wasn't given, create one
      if(string.IsNullOrEmpty(deadLetterQueueUrl))
      {
        Console.WriteLine("\nNo dead-letter queue was specified. Creating one...");
        deadLetterQueueUrl = await CreateQueue(sqsClient, queueName + "__dlq");
        Console.WriteLine($"Your new dead-letter queue:");
        await ShowAllAttributes(sqsClient, deadLetterQueueUrl);
      }

      // Create the message queue
      string messageQueueUrl = await CreateQueue(
        sqsClient, queueName, deadLetterQueueUrl, maxReceiveCount, receiveWaitTime);
      Console.WriteLine($"Your new message queue:");
      await ShowAllAttributes(sqsClient, messageQueueUrl);
    }


    //
    // Method to show a list of the existing queues
    private static async Task ShowQueues(IAmazonSQS sqsClient)
    {
      ListQueuesResponse responseList = await sqsClient.ListQueuesAsync("");
      Console.WriteLine();
      foreach(string qUrl in responseList.QueueUrls)
      {
        // Get and show all attributes. Could also get a subset.
        await ShowAllAttributes(sqsClient, qUrl);
      }
    }


    //
    // Method to create a queue. Returns the queue URL.
    private static async Task<string> CreateQueue(
      IAmazonSQS sqsClient, string qName, string deadLetterQueueUrl=null,
      string maxReceiveCount=null, string receiveWaitTime=null)
    {
      var attrs = new Dictionary<string, string>();

      // If a dead-letter queue is given, create a message queue
      if(!string.IsNullOrEmpty(deadLetterQueueUrl))
      {
        attrs.Add(QueueAttributeName.ReceiveMessageWaitTimeSeconds, receiveWaitTime);
        attrs.Add(QueueAttributeName.RedrivePolicy,
          $"{{\"deadLetterTargetArn\":\"{await GetQueueArn(sqsClient, deadLetterQueueUrl)}\"," +
          $"\"maxReceiveCount\":\"{maxReceiveCount}\"}}");
        // Add other attributes for the message queue such as VisibilityTimeout
      }

      // If no dead-letter queue is given, create one of those instead
      //else
      //{
      //  // Add attributes for the dead-letter queue as needed
      //  attrs.Add();
      //}

      // Create the queue
      CreateQueueResponse responseCreate = await sqsClient.CreateQueueAsync(
          new CreateQueueRequest{QueueName = qName, Attributes = attrs});
      return responseCreate.QueueUrl;
    }


    //
    // Method to get the ARN of a queue
    private static async Task<string> GetQueueArn(IAmazonSQS sqsClient, string qUrl)
    {
      GetQueueAttributesResponse responseGetAtt = await sqsClient.GetQueueAttributesAsync(
        qUrl, new List<string>{QueueAttributeName.QueueArn});
      return responseGetAtt.QueueARN;
    }


    //
    // Method to show all attributes of a queue
    private static async Task ShowAllAttributes(IAmazonSQS sqsClient, string qUrl)
    {
      var attributes = new List<string>{ QueueAttributeName.All };
      GetQueueAttributesResponse responseGetAtt =
        await sqsClient.GetQueueAttributesAsync(qUrl, attributes);
      Console.WriteLine($"Queue: {qUrl}");
      foreach(var att in responseGetAtt.Attributes)
        Console.WriteLine($"\t{att.Key}: {att.Value}");
    }


    //
    // Command-line help
    private static void PrintHelp()
    {
      Console.WriteLine(
      "\nUsage: SQSCreateQueue -q <queue-name> [-d <dead-letter-queue>]" +
        " [-m <max-receive-count>] [-w <wait-time>]" +
      "\n  -q, --queue-name: The name of the queue you want to create." +
      "\n  -d, --dead-letter-queue: The URL of an existing queue to be used as the dead-letter queue."+
      "\n      If this argument isn't supplied, a new dead-letter queue will be created." +
      "\n  -m, --max-receive-count: The value for maxReceiveCount in the RedrivePolicy of the queue." +
      $"\n      Default is {MaxReceiveCount}." +
      "\n  -w, --wait-time: The value for ReceiveMessageWaitTimeSeconds of the queue for long polling." +
      $"\n      Default is {ReceiveMessageWaitTime}.");
    }
  }


  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class that represents a command line on the console or terminal.
  // (This is the same for all examples. When you have seen it once, you can ignore it.)
  static class CommandLine
  {
    //
    // Method to parse a command line of the form: "--key value" or "-k value".
    //
    // Parameters:
    // - args: The command-line arguments passed into the application by the system.
    //
    // Returns:
    // A Dictionary with string Keys and Values.
    //
    // If a key is found without a matching value, Dictionary.Value is set to the key
    //  (including the dashes).
    // If a value is found without a matching key, Dictionary.Key is set to "--NoKeyN",
    //  where "N" represents sequential numbers.
    public static Dictionary<string,string> Parse(string[] args)
    {
      var parsedArgs = new Dictionary<string,string>();
      int i = 0, n = 0;
      while(i < args.Length)
      {
        // If the first argument in this iteration starts with a dash it's an option.
        if(args[i].StartsWith("-"))
        {
          var key = args[i++];
          var value = key;

          // Check to see if there's a value that goes with this option?
          if((i < args.Length) && (!args[i].StartsWith("-"))) value = args[i++];
          parsedArgs.Add(key, value);
        }

        // If the first argument in this iteration doesn't start with a dash, it's a value
        else
        {
          parsedArgs.Add("--NoKey" + n.ToString(), args[i++]);
          n++;
        }
      }

      return parsedArgs;
    }

    //
    // Method to get an argument from the parsed command-line arguments
    //
    // Parameters:
    // - parsedArgs: The Dictionary object returned from the Parse() method (shown above).
    // - defaultValue: The default string to return if the specified key isn't in parsedArgs.
    // - keys: An array of keys to look for in parsedArgs.
    public static string GetArgument(
      Dictionary<string,string> parsedArgs, string defaultReturn, params string[] keys)
    {
      string retval = null;
      foreach(var key in keys)
        if(parsedArgs.TryGetValue(key, out retval)) break;
      return retval ?? defaultReturn;
    }

    //
    // Method to exit the application with an error.
    public static void ErrorExit(string msg, int code=1)
    {
      Console.WriteLine("\nError");
      Console.WriteLine(msg);
      Environment.Exit(code);
    }
  }

}
```

## Considérations supplémentaires
<a name="CreateQueue-additional"></a>
+ Le nom de votre file d'attente doit être composé de caractères alphanumériques, de traits d'union et de traits de soulignement.
+ Les noms et les files d'attente URLs font la distinction majuscules/minuscules
+ Si vous avez besoin de l'URL de la file d'attente mais que vous n'avez que le nom de la file d'attente, utilisez l'une `AmazonSQSClient.GetQueueUrlAsync` des méthodes.
+ Pour plus d'informations sur les différents attributs de file d'attente que vous pouvez définir, consultez [CreateQueueRequest](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TCreateQueueRequest.html)la [référence d'AWS SDK pour .NET API](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/) ou [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)la [référence d'API Amazon Simple Queue Service](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/).
+ Cet exemple indique une longue période d'interrogation pour tous les messages de la file d'attente que vous créez. Cela se fait à l'aide de l'`ReceiveMessageWaitTimeSeconds`attribut.

  Vous pouvez également spécifier un long sondage lors d'un appel aux `ReceiveMessageAsync` méthodes de la SQSClient classe [Amazon](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSClient.html). Pour de plus amples informations, veuillez consulter [Réception de messages Amazon SQS](ReceiveMessage.md).

  Pour plus d'informations sur les sondages courts par rapport aux sondages longs, consultez la section Sondage [court et long](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html) du manuel *Amazon Simple Queue Service Developer Guide*.
+ Une file d'attente de lettres mortes est une file que les autres files d'attente (source) peuvent cibler pour les messages qui ne sont pas traités correctement. Pour plus d'informations, consultez les [files d'attente contenant des lettres mortes Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) dans le guide du développeur Amazon Simple Queue Service.
+ Vous pouvez également consulter la liste des files d'attente et les résultats de cet exemple dans la console [Amazon SQS](https://console.aws.amazon.com/sqs).

# Mise à jour des files d'attente Amazon SQS
<a name="UpdateSqsQueue"></a>

Cet exemple vous montre comment utiliser le pour mettre AWS SDK pour .NET à jour une file d'attente Amazon SQS. Après quelques vérifications, l'application met à jour l'attribut donné avec la valeur donnée, puis affiche tous les attributs de la file d'attente.

Si seule l'URL de la file d'attente est incluse dans les arguments de la ligne de commande, l'application affiche simplement tous les attributs de la file d'attente.

Les sections suivantes fournissent des extraits de cet exemple. Le [code complet de l'exemple](#UpdateSqsQueue-complete-code) est affiché ensuite et peut être créé et exécuté tel quel.

**Topics**
+ [Afficher les attributs de file d'attente](#UpdateSqsQueue-show-attributes)
+ [Valider le nom d'attribut](#UpdateSqsQueue-validate-attribute)
+ [Mettre à jour l'attribut de file](#UpdateSqsQueue-update-attribute)
+ [Code complet](#UpdateSqsQueue-complete-code)
+ [Considérations supplémentaires](#UpdateSqsQueue-additional)

## Afficher les attributs de file d'attente
<a name="UpdateSqsQueue-show-attributes"></a>

L'extrait suivant montre les attributs de la file d'attente identifiés par l'URL de file d'attente donnée.

L'exemple [à la fin de cette rubrique](#UpdateSqsQueue-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to show all attributes of a queue
    private static async Task ShowAllAttributes(IAmazonSQS sqsClient, string qUrl)
    {
      GetQueueAttributesResponse responseGetAtt =
        await sqsClient.GetQueueAttributesAsync(qUrl,
          new List<string>{ QueueAttributeName.All });
      Console.WriteLine($"Queue: {qUrl}");
      foreach(var att in responseGetAtt.Attributes)
        Console.WriteLine($"\t{att.Key}: {att.Value}");
    }
```

## Valider le nom d'attribut
<a name="UpdateSqsQueue-validate-attribute"></a>

L'extrait suivant valide le nom de l'attribut mis à jour.

L'exemple [à la fin de cette rubrique](#UpdateSqsQueue-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to check the name of the attribute
    private static bool ValidAttribute(string attribute)
    {
      var attOk = false;
      var qAttNameType = typeof(QueueAttributeName);
      List<string> qAttNamefields = new List<string>();
      foreach(var field in qAttNameType.GetFields())
       qAttNamefields.Add(field.Name);
      foreach(var name in qAttNamefields)
        if(attribute == name) { attOk = true; break; }
      return attOk;
    }
```

## Mettre à jour l'attribut de file
<a name="UpdateSqsQueue-update-attribute"></a>

L'extrait suivant met à jour un attribut de la file d'attente identifié par l'URL de file d'attente donnée.

L'exemple [à la fin de cette rubrique](#UpdateSqsQueue-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to update a queue attribute
    private static async Task UpdateAttribute(
      IAmazonSQS sqsClient, string qUrl, string attribute, string value)
    {
      await sqsClient.SetQueueAttributesAsync(qUrl,
        new Dictionary<string, string>{{attribute, value}});
    }
```

## Code complet
<a name="UpdateSqsQueue-complete-code"></a>

Cette section présente les références pertinentes et le code complet de cet exemple.

### Références du SDK
<a name="w2aac19c15c29c19c25b5b1"></a>

NuGet colis :
+ [AWSSDK.SQS](https://www.nuget.org/packages/AWSSDK.SQS)

Éléments de programmation :
+ [Espace de noms Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

  Classe [Amazon SQSClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSClient.html)

  Classe [QueueAttributeName](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TQueueAttributeName.html)
+ [Espace de noms Amazon.SQS.Model](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQSModel.html)

  Classe [GetQueueAttributesResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TGetQueueAttributesResponse.html)

### Le code
<a name="w2aac19c15c29c19c25b7b1"></a>

```
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Amazon.SQS;
using Amazon.SQS.Model;

namespace SQSUpdateQueue
{
  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class to update a queue
  class Program
  {
    private const int MaxArgs = 3;
    private const int InvalidArgCount = 2;

    static async Task Main(string[] args)
    {
      // Parse the command line and show help if necessary
      var parsedArgs = CommandLine.Parse(args);
      if(parsedArgs.Count == 0)
      {
        PrintHelp();
        return;
      }
      if((parsedArgs.Count > MaxArgs) || (parsedArgs.Count == InvalidArgCount))
        CommandLine.ErrorExit("\nThe number of command-line arguments is incorrect." +
          "\nRun the command with no arguments to see help.");

      // Get the application arguments from the parsed list
      var qUrl = CommandLine.GetArgument(parsedArgs, null, "-q");
      var attribute = CommandLine.GetArgument(parsedArgs, null, "-a");
      var value = CommandLine.GetArgument(parsedArgs, null, "-v", "--value");

      if(string.IsNullOrEmpty(qUrl))
        CommandLine.ErrorExit("\nYou must supply at least a queue URL." +
          "\nRun the command with no arguments to see help.");

      // Create the Amazon SQS client
      var sqsClient = new AmazonSQSClient();

      // In the case of one command-line argument, just show the attributes for the queue
      if(parsedArgs.Count == 1)
        await ShowAllAttributes(sqsClient, qUrl);

      // Otherwise, attempt to update the given queue attribute with the given value
      else
      {
        // Check to see if the attribute is valid
        if(ValidAttribute(attribute))
        {
          // Perform the update and then show all the attributes of the queue
          await UpdateAttribute(sqsClient, qUrl, attribute, value);
          await ShowAllAttributes(sqsClient, qUrl);
        }
        else
        {
          Console.WriteLine($"\nThe given attribute name, {attribute}, isn't valid.");
        }
      }
    }


    //
    // Method to show all attributes of a queue
    private static async Task ShowAllAttributes(IAmazonSQS sqsClient, string qUrl)
    {
      GetQueueAttributesResponse responseGetAtt =
        await sqsClient.GetQueueAttributesAsync(qUrl,
          new List<string>{ QueueAttributeName.All });
      Console.WriteLine($"Queue: {qUrl}");
      foreach(var att in responseGetAtt.Attributes)
        Console.WriteLine($"\t{att.Key}: {att.Value}");
    }


    //
    // Method to check the name of the attribute
    private static bool ValidAttribute(string attribute)
    {
      var attOk = false;
      var qAttNameType = typeof(QueueAttributeName);
      List<string> qAttNamefields = new List<string>();
      foreach(var field in qAttNameType.GetFields())
       qAttNamefields.Add(field.Name);
      foreach(var name in qAttNamefields)
        if(attribute == name) { attOk = true; break; }
      return attOk;
    }


    //
    // Method to update a queue attribute
    private static async Task UpdateAttribute(
      IAmazonSQS sqsClient, string qUrl, string attribute, string value)
    {
      await sqsClient.SetQueueAttributesAsync(qUrl,
        new Dictionary<string, string>{{attribute, value}});
    }


    //
    // Command-line help
    private static void PrintHelp()
    {
      Console.WriteLine("\nUsage: SQSUpdateQueue -q queue_url [-a attribute -v value]");
      Console.WriteLine("  -q: The URL of the queue you want to update.");
      Console.WriteLine("  -a: The name of the attribute to update.");
      Console.WriteLine("  -v, --value: The value to assign to the attribute.");
    }
  }


  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class that represents a command line on the console or terminal.
  // (This is the same for all examples. When you have seen it once, you can ignore it.)
  static class CommandLine
  {
    //
    // Method to parse a command line of the form: "--key value" or "-k value".
    //
    // Parameters:
    // - args: The command-line arguments passed into the application by the system.
    //
    // Returns:
    // A Dictionary with string Keys and Values.
    //
    // If a key is found without a matching value, Dictionary.Value is set to the key
    //  (including the dashes).
    // If a value is found without a matching key, Dictionary.Key is set to "--NoKeyN",
    //  where "N" represents sequential numbers.
    public static Dictionary<string,string> Parse(string[] args)
    {
      var parsedArgs = new Dictionary<string,string>();
      int i = 0, n = 0;
      while(i < args.Length)
      {
        // If the first argument in this iteration starts with a dash it's an option.
        if(args[i].StartsWith("-"))
        {
          var key = args[i++];
          var value = key;

          // Check to see if there's a value that goes with this option?
          if((i < args.Length) && (!args[i].StartsWith("-"))) value = args[i++];
          parsedArgs.Add(key, value);
        }

        // If the first argument in this iteration doesn't start with a dash, it's a value
        else
        {
          parsedArgs.Add("--NoKey" + n.ToString(), args[i++]);
          n++;
        }
      }

      return parsedArgs;
    }

    //
    // Method to get an argument from the parsed command-line arguments
    //
    // Parameters:
    // - parsedArgs: The Dictionary object returned from the Parse() method (shown above).
    // - defaultValue: The default string to return if the specified key isn't in parsedArgs.
    // - keys: An array of keys to look for in parsedArgs.
    public static string GetArgument(
      Dictionary<string,string> parsedArgs, string defaultReturn, params string[] keys)
    {
      string retval = null;
      foreach(var key in keys)
        if(parsedArgs.TryGetValue(key, out retval)) break;
      return retval ?? defaultReturn;
    }

    //
    // Method to exit the application with an error.
    public static void ErrorExit(string msg, int code=1)
    {
      Console.WriteLine("\nError");
      Console.WriteLine(msg);
      Environment.Exit(code);
    }
  }

}
```

## Considérations supplémentaires
<a name="UpdateSqsQueue-additional"></a>
+ Pour mettre à jour l'`RedrivePolicy`attribut, vous devez mettre la valeur entière entre guillemets et éviter les guillemets pour les key/value paires, en fonction de votre système d'exploitation.

  Sous Windows, par exemple, la valeur est construite de la manière suivante :

  ```
  "{\"deadLetterTargetArn\":\"DEAD_LETTER-QUEUE-ARN\",\"maxReceiveCount\":\"10\"}"
  ```

# Suppression des files d'attente Amazon SQS
<a name="DeleteSqsQueue"></a>

Cet exemple vous montre comment utiliser le pour AWS SDK pour .NET supprimer une file d'attente Amazon SQS. L'application supprime la file d'attente, attend qu'elle disparaisse pendant un certain temps, puis affiche la liste des files d'attente restantes.

Si vous ne fournissez aucun argument de ligne de commande, l'application affiche simplement une liste des files d'attente existantes.

Les sections suivantes fournissent des extraits de cet exemple. Le [code complet de l'exemple](#DeleteSqsQueue-complete-code) est affiché ensuite et peut être créé et exécuté tel quel.

**Topics**
+ [Supprimer la file d'attente](#DeleteSqsQueue-delete-queue)
+ [Attendez que la file d'attente soit terminée](#DeleteSqsQueue-wait)
+ [Afficher la liste des files d'attente existantes](#DeleteSqsQueue-list-queues)
+ [Code complet](#DeleteSqsQueue-complete-code)
+ [Considérations supplémentaires](#DeleteSqsQueue-additional)

## Supprimer la file d'attente
<a name="DeleteSqsQueue-delete-queue"></a>

L'extrait suivant supprime la file d'attente identifiée par l'URL de file d'attente donnée.

L'exemple [à la fin de cette rubrique](#DeleteSqsQueue-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to delete an SQS queue
    private static async Task DeleteQueue(IAmazonSQS sqsClient, string qUrl)
    {
      Console.WriteLine($"Deleting queue {qUrl}...");
      await sqsClient.DeleteQueueAsync(qUrl);
      Console.WriteLine($"Queue {qUrl} has been deleted.");
    }
```

## Attendez que la file d'attente soit terminée
<a name="DeleteSqsQueue-wait"></a>

L'extrait suivant attend la fin du processus de suppression, ce qui peut prendre 60 secondes.

L'exemple [à la fin de cette rubrique](#DeleteSqsQueue-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to wait up to a given number of seconds
    private static async Task Wait(
      IAmazonSQS sqsClient, int numSeconds, string qUrl)
    {
      Console.WriteLine($"Waiting for up to {numSeconds} seconds.");
      Console.WriteLine("Press any key to stop waiting. (Response might be slightly delayed.)");
      for(int i=0; i<numSeconds; i++)
      {
        Console.Write(".");
        Thread.Sleep(1000);
        if(Console.KeyAvailable) break;

        // Check to see if the queue is gone yet
        var found = false;
        ListQueuesResponse responseList = await sqsClient.ListQueuesAsync("");
        foreach(var url in responseList.QueueUrls)
        {
          if(url == qUrl)
          {
            found = true;
            break;
          }
        }
        if(!found) break;
      }
    }
```

## Afficher la liste des files d'attente existantes
<a name="DeleteSqsQueue-list-queues"></a>

L'extrait suivant présente une liste des files d'attente existantes dans la région du client SQS.

L'exemple [à la fin de cette rubrique](#DeleteSqsQueue-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to show a list of the existing queues
    private static async Task ListQueues(IAmazonSQS sqsClient)
    {
      ListQueuesResponse responseList = await sqsClient.ListQueuesAsync("");
      Console.WriteLine("\nList of queues:");
      foreach(var qUrl in responseList.QueueUrls)
        Console.WriteLine($"- {qUrl}");
    }
```

## Code complet
<a name="DeleteSqsQueue-complete-code"></a>

Cette section présente les références pertinentes et le code complet de cet exemple.

### Références du SDK
<a name="w2aac19c15c29c21c25b5b1"></a>

NuGet colis :
+ [AWSSDK.SQS](https://www.nuget.org/packages/AWSSDK.SQS)

Éléments de programmation :
+ [Espace de noms Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

  Classe [Amazon SQSClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSClient.html)
+ [Espace de noms Amazon.SQS.Model](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQSModel.html)

  Classe [ListQueuesResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TListQueuesResponse.html)

### Le code
<a name="w2aac19c15c29c21c25b7b1"></a>

```
using System;
using System.Threading;
using System.Threading.Tasks;
using Amazon.SQS;
using Amazon.SQS.Model;

namespace SQSDeleteQueue
{
  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class to update a queue
  class Program
  {
    private const int TimeToWait = 60;

    static async Task Main(string[] args)
    {
      // Create the Amazon SQS client
      var sqsClient = new AmazonSQSClient();

      // If no command-line arguments, just show a list of the queues
      if(args.Length == 0)
      {
        Console.WriteLine("\nUsage: SQSCreateQueue queue_url");
        Console.WriteLine("   queue_url - The URL of the queue you want to delete.");
        Console.WriteLine("\nNo arguments specified.");
        Console.Write("Do you want to see a list of the existing queues? ((y) or n): ");
        var response = Console.ReadLine();
        if((string.IsNullOrEmpty(response)) || (response.ToLower() == "y"))
          await ListQueues(sqsClient);
        return;
      }

      // If given a queue URL, delete that queue
      if(args[0].StartsWith("https://sqs."))
      {
        // Delete the queue
        await DeleteQueue(sqsClient, args[0]);
        // Wait for a little while because it takes a while for the queue to disappear
        await Wait(sqsClient, TimeToWait, args[0]);
        // Show a list of the remaining queues
        await ListQueues(sqsClient);
      }
      else
      {
        Console.WriteLine("The command-line argument isn't a queue URL:");
        Console.WriteLine($"{args[0]}");
      }
    }


    //
    // Method to delete an SQS queue
    private static async Task DeleteQueue(IAmazonSQS sqsClient, string qUrl)
    {
      Console.WriteLine($"Deleting queue {qUrl}...");
      await sqsClient.DeleteQueueAsync(qUrl);
      Console.WriteLine($"Queue {qUrl} has been deleted.");
    }


    //
    // Method to wait up to a given number of seconds
    private static async Task Wait(
      IAmazonSQS sqsClient, int numSeconds, string qUrl)
    {
      Console.WriteLine($"Waiting for up to {numSeconds} seconds.");
      Console.WriteLine("Press any key to stop waiting. (Response might be slightly delayed.)");
      for(int i=0; i<numSeconds; i++)
      {
        Console.Write(".");
        Thread.Sleep(1000);
        if(Console.KeyAvailable) break;

        // Check to see if the queue is gone yet
        var found = false;
        ListQueuesResponse responseList = await sqsClient.ListQueuesAsync("");
        foreach(var url in responseList.QueueUrls)
        {
          if(url == qUrl)
          {
            found = true;
            break;
          }
        }
        if(!found) break;
      }
    }


    //
    // Method to show a list of the existing queues
    private static async Task ListQueues(IAmazonSQS sqsClient)
    {
      ListQueuesResponse responseList = await sqsClient.ListQueuesAsync("");
      Console.WriteLine("\nList of queues:");
      foreach(var qUrl in responseList.QueueUrls)
        Console.WriteLine($"- {qUrl}");
    }
  }
}
```

## Considérations supplémentaires
<a name="DeleteSqsQueue-additional"></a>
+ L'appel `DeleteQueueAsync` d'API ne vérifie pas si la file d'attente que vous supprimez est utilisée comme file d'attente de lettres mortes. Une procédure plus sophistiquée pourrait vérifier cela.
+ Vous pouvez également consulter la liste des files d'attente et les résultats de cet exemple dans la console [Amazon SQS](https://console.aws.amazon.com/sqs).

# Envoi de messages Amazon SQS
<a name="SendMessage"></a>

[Cet exemple vous montre comment utiliser le pour envoyer des messages AWS SDK pour .NET à une file d'attente Amazon SQS, que vous pouvez créer par [programmation](CreateQueue.md) ou à l'aide de la console Amazon SQS.](https://console.aws.amazon.com/sqs) L'application envoie un seul message à la file d'attente, puis un lot de messages. L'application attend ensuite l'entrée de l'utilisateur, qui peut prendre la forme de messages supplémentaires à envoyer à la file d'attente ou d'une demande de sortie de l'application.

Cet exemple et le [suivant concernant la réception de messages](ReceiveMessage.md) peuvent être utilisés conjointement pour voir le flux des messages dans Amazon SQS.

Les sections suivantes fournissent des extraits de cet exemple. Le [code complet de l'exemple](#SendMessage-complete-code) est affiché ensuite et peut être créé et exécuté tel quel.

**Topics**
+ [Envoyer un message](#SendMessage-send-message)
+ [Envoyer un lot de messages](#SendMessage-send-batch)
+ [Supprimer tous les messages de la file d'attente](#SendMessage-purge-messages)
+ [Code complet](#SendMessage-complete-code)
+ [Considérations supplémentaires](#SendMessage-additional)

## Envoyer un message
<a name="SendMessage-send-message"></a>

L'extrait suivant envoie un message à la file d'attente identifiée par l'URL de file d'attente donnée.

L'exemple [à la fin de cette rubrique](#SendMessage-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to put a message on a queue
    // Could be expanded to include message attributes, etc., in a SendMessageRequest
    private static async Task SendMessage(
      IAmazonSQS sqsClient, string qUrl, string messageBody)
    {
      SendMessageResponse responseSendMsg =
        await sqsClient.SendMessageAsync(qUrl, messageBody);
      Console.WriteLine($"Message added to queue\n  {qUrl}");
      Console.WriteLine($"HttpStatusCode: {responseSendMsg.HttpStatusCode}");
    }
```

## Envoyer un lot de messages
<a name="SendMessage-send-batch"></a>

L'extrait suivant envoie un lot de messages à la file d'attente identifiée par l'URL de file d'attente donnée.

L'exemple [à la fin de cette rubrique](#SendMessage-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to put a batch of messages on a queue
    // Could be expanded to include message attributes, etc.,
    // in the SendMessageBatchRequestEntry objects
    private static async Task SendMessageBatch(
      IAmazonSQS sqsClient, string qUrl, List<SendMessageBatchRequestEntry> messages)
    {
      Console.WriteLine($"\nSending a batch of messages to queue\n  {qUrl}");
      SendMessageBatchResponse responseSendBatch =
        await sqsClient.SendMessageBatchAsync(qUrl, messages);
      // Could test responseSendBatch.Failed here
      foreach(SendMessageBatchResultEntry entry in responseSendBatch.Successful)
        Console.WriteLine($"Message {entry.Id} successfully queued.");
    }
```

## Supprimer tous les messages de la file d'attente
<a name="SendMessage-purge-messages"></a>

L'extrait suivant supprime tous les messages de la file d'attente identifiée par l'URL de file d'attente donnée. Cette opération est également connue sous le nom de *purge de la file d'attente*.

L'exemple [à la fin de cette rubrique](#SendMessage-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to delete all messages from the queue
    private static async Task DeleteAllMessages(IAmazonSQS sqsClient, string qUrl)
    {
      Console.WriteLine($"\nPurging messages from queue\n  {qUrl}...");
      PurgeQueueResponse responsePurge = await sqsClient.PurgeQueueAsync(qUrl);
      Console.WriteLine($"HttpStatusCode: {responsePurge.HttpStatusCode}");
    }
```

## Code complet
<a name="SendMessage-complete-code"></a>

Cette section présente les références pertinentes et le code complet de cet exemple.

### Références du SDK
<a name="w2aac19c15c29c23c25b5b1"></a>

NuGet colis :
+ [AWSSDK.SQS](https://www.nuget.org/packages/AWSSDK.SQS)

Éléments de programmation :
+ [Espace de noms Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

  Classe [Amazon SQSClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSClient.html)
+ [Espace de noms Amazon.SQS.Model](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQSModel.html)

  Classe [PurgeQueueResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TPurgeQueueResponse.html)

  Classe [SendMessageBatchResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSendMessageBatchResponse.html)

  Classe [SendMessageResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSendMessageResponse.html)

  Classe [SendMessageBatchRequestEntry](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSendMessageBatchRequestEntry.html)

  Classe [SendMessageBatchResultEntry](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSendMessageBatchResultEntry.html)

### Le code
<a name="w2aac19c15c29c23c25b7b1"></a>

```
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Amazon.SQS;
using Amazon.SQS.Model;

namespace SQSSendMessages
{
  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class to send messages to a queue
  class Program
  {
    // Some example messages to send to the queue
    private const string JsonMessage = "{\"product\":[{\"name\":\"Product A\",\"price\": \"32\"},{\"name\": \"Product B\",\"price\": \"27\"}]}";
    private const string XmlMessage = "<products><product name=\"Product A\" price=\"32\" /><product name=\"Product B\" price=\"27\" /></products>";
    private const string CustomMessage = "||product|Product A|32||product|Product B|27||";
    private const string TextMessage = "Just a plain text message.";

    static async Task Main(string[] args)
    {
      // Do some checks on the command-line
      if(args.Length == 0)
      {
        Console.WriteLine("\nUsage: SQSSendMessages queue_url");
        Console.WriteLine("   queue_url - The URL of an existing SQS queue.");
        return;
      }
      if(!args[0].StartsWith("https://sqs."))
      {
        Console.WriteLine("\nThe command-line argument isn't a queue URL:");
        Console.WriteLine($"{args[0]}");
        return;
      }

      // Create the Amazon SQS client
      var sqsClient = new AmazonSQSClient();

      // (could verify that the queue exists)
      // Send some example messages to the given queue
      // A single message
      await SendMessage(sqsClient, args[0], JsonMessage);

      // A batch of messages
      var batchMessages = new List<SendMessageBatchRequestEntry>{
        new SendMessageBatchRequestEntry("xmlMsg", XmlMessage),
        new SendMessageBatchRequestEntry("customeMsg", CustomMessage),
        new SendMessageBatchRequestEntry("textMsg", TextMessage)};
      await SendMessageBatch(sqsClient, args[0], batchMessages);

      // Let the user send their own messages or quit
      await InteractWithUser(sqsClient, args[0]);

      // Delete all messages that are still in the queue
      await DeleteAllMessages(sqsClient, args[0]);
    }


    //
    // Method to put a message on a queue
    // Could be expanded to include message attributes, etc., in a SendMessageRequest
    private static async Task SendMessage(
      IAmazonSQS sqsClient, string qUrl, string messageBody)
    {
      SendMessageResponse responseSendMsg =
        await sqsClient.SendMessageAsync(qUrl, messageBody);
      Console.WriteLine($"Message added to queue\n  {qUrl}");
      Console.WriteLine($"HttpStatusCode: {responseSendMsg.HttpStatusCode}");
    }


    //
    // Method to put a batch of messages on a queue
    // Could be expanded to include message attributes, etc.,
    // in the SendMessageBatchRequestEntry objects
    private static async Task SendMessageBatch(
      IAmazonSQS sqsClient, string qUrl, List<SendMessageBatchRequestEntry> messages)
    {
      Console.WriteLine($"\nSending a batch of messages to queue\n  {qUrl}");
      SendMessageBatchResponse responseSendBatch =
        await sqsClient.SendMessageBatchAsync(qUrl, messages);
      // Could test responseSendBatch.Failed here
      foreach(SendMessageBatchResultEntry entry in responseSendBatch.Successful)
        Console.WriteLine($"Message {entry.Id} successfully queued.");
    }


    //
    // Method to get input from the user
    // They can provide messages to put in the queue or exit the application
    private static async Task InteractWithUser(IAmazonSQS sqsClient, string qUrl)
    {
      string response;
      while (true)
      {
        // Get the user's input
        Console.WriteLine("\nType a message for the queue or \"exit\" to quit:");
        response = Console.ReadLine();
        if(response.ToLower() == "exit") break;

        // Put the user's message in the queue
        await SendMessage(sqsClient, qUrl, response);
      }
    }


    //
    // Method to delete all messages from the queue
    private static async Task DeleteAllMessages(IAmazonSQS sqsClient, string qUrl)
    {
      Console.WriteLine($"\nPurging messages from queue\n  {qUrl}...");
      PurgeQueueResponse responsePurge = await sqsClient.PurgeQueueAsync(qUrl);
      Console.WriteLine($"HttpStatusCode: {responsePurge.HttpStatusCode}");
    }
  }
}
```

## Considérations supplémentaires
<a name="SendMessage-additional"></a>
+ Pour plus d'informations sur les différentes limitations relatives aux messages, y compris les caractères autorisés, consultez la section [Quotas relatifs aux messages](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-quotas.html#quotas-messages) dans le manuel [Amazon Simple Queue Service Developer Guide](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/).
+ Les messages restent dans les files d'attente jusqu'à ce qu'ils soient supprimés ou que la file d'attente soit purgée. Lorsqu'un message est reçu par une application, il n'est pas visible dans la file d'attente même s'il existe toujours dans la file d'attente. Pour plus d'informations sur les délais de visibilité, consultez [Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html) Visibility Timeout.
+ Outre le corps du message, vous pouvez également ajouter des attributs aux messages. Pour plus d'informations, consultez la section [Métadonnées des messages](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html).

# Réception de messages Amazon SQS
<a name="ReceiveMessage"></a>

[Cet exemple vous montre comment utiliser le AWS SDK pour .NET pour recevoir des messages d'une file d'attente Amazon SQS, que vous pouvez créer par [programmation](CreateQueue.md) ou à l'aide de la console Amazon SQS.](https://console.aws.amazon.com/sqs) L'application lit un seul message dans la file d'attente, traite le message (dans ce cas, affiche le corps du message sur la console), puis le supprime de la file d'attente. L'application répète ces étapes jusqu'à ce que l'utilisateur tape une touche sur le clavier.

Cet exemple et l'[exemple précédent concernant l'envoi de messages](SendMessage.md) peuvent être utilisés conjointement pour voir le flux des messages dans Amazon SQS.

Les sections suivantes fournissent des extraits de cet exemple. Le [code complet de l'exemple](#ReceiveMessage-complete-code) est affiché ensuite et peut être créé et exécuté tel quel.

**Topics**
+ [Recevez un message](#ReceiveMessage-receive)
+ [Supprimer un message](#ReceiveMessage-delete)
+ [Code complet](#ReceiveMessage-complete-code)
+ [Considérations supplémentaires](#ReceiveMessage-additional)

## Recevez un message
<a name="ReceiveMessage-receive"></a>

L'extrait suivant reçoit un message de la file d'attente identifiée par l'URL de file d'attente donnée.

L'exemple [à la fin de cette rubrique](#ReceiveMessage-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to read a message from the given queue
    // In this example, it gets one message at a time
    private static async Task<ReceiveMessageResponse> GetMessage(
      IAmazonSQS sqsClient, string qUrl, int waitTime=0)
    {
      return await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest{
        QueueUrl=qUrl,
        MaxNumberOfMessages=MaxMessages,
        WaitTimeSeconds=waitTime
        // (Could also request attributes, set visibility timeout, etc.)
      });
    }
```

## Supprimer un message
<a name="ReceiveMessage-delete"></a>

L'extrait suivant supprime un message de la file d'attente identifiée par l'URL de file d'attente donnée.

L'exemple [à la fin de cette rubrique](#ReceiveMessage-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to delete a message from a queue
    private static async Task DeleteMessage(
      IAmazonSQS sqsClient, Message message, string qUrl)
    {
      Console.WriteLine($"\nDeleting message {message.MessageId} from queue...");
      await sqsClient.DeleteMessageAsync(qUrl, message.ReceiptHandle);
    }
```

## Code complet
<a name="ReceiveMessage-complete-code"></a>

Cette section présente les références pertinentes et le code complet de cet exemple.

### Références du SDK
<a name="w2aac19c15c29c25c21b5b1"></a>

NuGet colis :
+ [AWSSDK.SQS](https://www.nuget.org/packages/AWSSDK.SQS)

Éléments de programmation :
+ [Espace de noms Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

  Classe [Amazon SQSClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSClient.html)
+ [Espace de noms Amazon.SQS.Model](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQSModel.html)

  Classe [ReceiveMessageRequest](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TReceiveMessageRequest.html)

  Classe [ReceiveMessageResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TReceiveMessageResponse.html)

### Le code
<a name="w2aac19c15c29c25c21b7b1"></a>

```
using System;
using System.Threading.Tasks;
using Amazon.SQS;
using Amazon.SQS.Model;

namespace SQSReceiveMessages
{
  class Program
  {
    private const int MaxMessages = 1;
    private const int WaitTime = 2;
    static async Task Main(string[] args)
    {
      // Do some checks on the command-line
      if(args.Length == 0)
      {
        Console.WriteLine("\nUsage: SQSReceiveMessages queue_url");
        Console.WriteLine("   queue_url - The URL of an existing SQS queue.");
        return;
      }
      if(!args[0].StartsWith("https://sqs."))
      {
        Console.WriteLine("\nThe command-line argument isn't a queue URL:");
        Console.WriteLine($"{args[0]}");
        return;
      }

      // Create the Amazon SQS client
      var sqsClient = new AmazonSQSClient();

      // (could verify that the queue exists)
      // Read messages from the queue and perform appropriate actions
      Console.WriteLine($"Reading messages from queue\n  {args[0]}");
      Console.WriteLine("Press any key to stop. (Response might be slightly delayed.)");
      do
      {
        var msg = await GetMessage(sqsClient, args[0], WaitTime);
        if(msg.Messages.Count != 0)
        {
          if(ProcessMessage(msg.Messages[0]))
            await DeleteMessage(sqsClient, msg.Messages[0], args[0]);
        }
      } while(!Console.KeyAvailable);
    }


    //
    // Method to read a message from the given queue
    // In this example, it gets one message at a time
    private static async Task<ReceiveMessageResponse> GetMessage(
      IAmazonSQS sqsClient, string qUrl, int waitTime=0)
    {
      return await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest{
        QueueUrl=qUrl,
        MaxNumberOfMessages=MaxMessages,
        WaitTimeSeconds=waitTime
        // (Could also request attributes, set visibility timeout, etc.)
      });
    }


    //
    // Method to process a message
    // In this example, it simply prints the message
    private static bool ProcessMessage(Message message)
    {
      Console.WriteLine($"\nMessage body of {message.MessageId}:");
      Console.WriteLine($"{message.Body}");
      return true;
    }


    //
    // Method to delete a message from a queue
    private static async Task DeleteMessage(
      IAmazonSQS sqsClient, Message message, string qUrl)
    {
      Console.WriteLine($"\nDeleting message {message.MessageId} from queue...");
      await sqsClient.DeleteMessageAsync(qUrl, message.ReceiptHandle);
    }
  }
}
```

## Considérations supplémentaires
<a name="ReceiveMessage-additional"></a>
+ Pour spécifier un long sondage, cet exemple utilise la `WaitTimeSeconds` propriété pour chaque appel à la `ReceiveMessageAsync` méthode.

  Vous pouvez également spécifier un long sondage pour tous les messages d'une file d'attente en utilisant l'`ReceiveMessageWaitTimeSeconds`attribut lors de la [création](CreateQueue.md) ou de la [mise à jour](UpdateSqsQueue.md) de la file d'attente.

  Pour plus d'informations sur les sondages courts par rapport aux sondages longs, consultez la section Sondage [court et long](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html) du manuel *Amazon Simple Queue Service Developer Guide*.
+ Pendant le traitement des messages, vous pouvez utiliser le descripteur de réception pour modifier le délai de visibilité des messages. Pour plus d'informations sur la procédure à suivre, consultez les `ChangeMessageVisibilityAsync` méthodes de la SQSClient classe [Amazon](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSClient.html).
+ L'appel de la `DeleteMessageAsync` méthode supprime le message de la file d'attente de manière inconditionnelle, quel que soit le paramètre de délai d'expiration de visibilité.