

Version 4 (V4) von AWS SDK für .NET wurde veröffentlicht\$1

Informationen zu wichtigen Änderungen und zur Migration Ihrer Anwendungen finden Sie im [Migrationsthema](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)

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Nachrichtenübermittlung mit Amazon SQS
<a name="sqs-apis-intro"></a>

Der AWS SDK für .NET unterstützt [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/), einen Nachrichtenwarteschlangen-Service, der Nachrichten oder Workflows zwischen Komponenten in einem System verarbeitet.

Amazon SQS SQS-Warteschlangen bieten einen Mechanismus, mit dem Sie Nachrichten zwischen Softwarekomponenten wie Microservices, verteilten Systemen und serverlosen Anwendungen senden, speichern und empfangen können. Auf diese Weise können Sie solche Komponenten entkoppeln und müssen kein eigenes Messaging-System entwerfen und betreiben. Informationen zur Funktionsweise von Warteschlangen und Nachrichten in Amazon SQS finden Sie in den Amazon [SQS-Tutorials und unter Basic Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-other-tutorials.html) [architecture im Amazon](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-architecture.html) [Simple Queue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/) Service Developer Guide.

**Wichtig**  
Aufgrund des verteilten Charakters von Warteschlangen kann Amazon SQS nicht garantieren, dass Sie Nachrichten in der genauen Reihenfolge erhalten, in der sie gesendet wurden. Wenn Sie die Nachrichtenreihenfolge beibehalten müssen, verwenden Sie eine [Amazon SQS FIFO-Warteschlange](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fifo-queues.html).

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

Das AWS SDK für .NET bietet APIs Amazon SQS-Kunden. Sie APIs ermöglichen es Ihnen, mit Amazon SQS SQS-Funktionen wie Warteschlangen und Nachrichten zu arbeiten. Dieser Abschnitt enthält eine kleine Anzahl von Beispielen, die Ihnen zeigen, welchen Mustern Sie bei der Arbeit mit diesen Modellen folgen können. APIs Den vollständigen Satz von finden Sie in der APIs [AWS SDK für .NET API-Referenz](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/) (und scrollen Sie zu „Amazon.sqs“).

Die Amazon SQS APIs werden durch das [AWSSDK NuGet .SQS-Paket](https://www.nuget.org/packages/AWSSDK.SQS) bereitgestellt.

## Voraussetzungen
<a name="w2aac19c15c29c11"></a>

Bevor Sie beginnen, stellen Sie sicher, dass Sie [Ihre Umgebung eingerichtet und Ihr Projekt](net-dg-config.md) [konfiguriert](configuring-the-sdk.md) haben. Lesen Sie auch die Informationen unter[Verwenden der SDK](net-dg-sdk-features.md).

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

**Topics**
+ [APIs](#w2aac19c15c29b9)
+ [Voraussetzungen](#w2aac19c15c29c11)
+ [Topics](#w2aac19c15c29c13)
+ [Erstellen von Warteschlangen](CreateQueue.md)
+ [Warteschlangen werden aktualisiert](UpdateSqsQueue.md)
+ [Warteschlangen löschen](DeleteSqsQueue.md)
+ [Senden von Nachrichten](SendMessage.md)
+ [Empfangen von Nachrichten](ReceiveMessage.md)

# Amazon SQS SQS-Warteschlangen erstellen
<a name="CreateQueue"></a>

Dieses Beispiel zeigt Ihnen, wie Sie mit dem AWS SDK für .NET eine Amazon SQS SQS-Warteschlange erstellen. Die Anwendung erstellt eine [Warteschlange für unzustellbare Briefe](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html), wenn Sie den ARN für eine nicht angeben. Anschließend erstellt sie eine Standard-Nachrichtenwarteschlange, die eine Warteschlange für unzustellbare Nachrichten enthält (die, die Sie angegeben haben oder die, die erstellt wurde).

Wenn Sie keine Befehlszeilenargumente angeben, zeigt die Anwendung einfach Informationen über alle vorhandenen Warteschlangen an.

Die folgenden Abschnitte enthalten Auszüge aus diesem Beispiel. Der [vollständige Code für das Beispiel](#CreateQueue-complete-code) wird danach angezeigt und kann unverändert erstellt und ausgeführt werden.

**Topics**
+ [Bestehende Warteschlangen anzeigen](#CreateQueue-show-queues)
+ [Erstellen Sie die Warteschlange](#CreateQueue-create-queue)
+ [Den ARN einer Warteschlange abrufen](#CreateQueue-get-arn)
+ [Vollständiger Code](#CreateQueue-complete-code)
+ [Weitere Überlegungen](#CreateQueue-additional)

## Bestehende Warteschlangen anzeigen
<a name="CreateQueue-show-queues"></a>

Der folgende Ausschnitt zeigt eine Liste der vorhandenen Warteschlangen in der Region des SQS-Clients und die Attribute jeder Warteschlange.

Das Beispiel [am Ende dieses Themas zeigt, wie dieses](#CreateQueue-complete-code) Snippet verwendet wird.

```
    //
    // 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}");
    }
```

## Erstellen Sie die Warteschlange
<a name="CreateQueue-create-queue"></a>

Das folgende Snippet erstellt eine Warteschlange. Das Snippet beinhaltet die Verwendung einer Warteschlange für unzustellbare Briefe, für Ihre Warteschlangen ist jedoch nicht unbedingt eine Warteschlange erforderlich.

Das Beispiel [am Ende dieses Themas zeigt, wie dieser Codeausschnitt](#CreateQueue-complete-code) verwendet wird.

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

## Den ARN einer Warteschlange abrufen
<a name="CreateQueue-get-arn"></a>

Das folgende Snippet ruft den ARN der Warteschlange ab, die durch die angegebene Warteschlangen-URL identifiziert wird.

Das Beispiel [am Ende dieses Themas zeigt, wie dieses](#CreateQueue-complete-code) Snippet verwendet wird.

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

## Vollständiger Code
<a name="CreateQueue-complete-code"></a>

Dieser Abschnitt enthält relevante Referenzen und den vollständigen Code für dieses Beispiel.

### SDK-Referenzen
<a name="w2aac19c15c29c17c25b5b1"></a>

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

Elemente der Programmierung:
+ [Namespace Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

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

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

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

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

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

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

### Der 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);
    }
  }

}
```

## Weitere Überlegungen
<a name="CreateQueue-additional"></a>
+ Ihr Warteschlangenname muss aus alphanumerischen Zeichen, Bindestrichen und Unterstrichen bestehen.
+ Bei Warteschlangennamen und Warteschlangen wird zwischen Groß- und Kleinschreibung unterschieden URLs 
+ Wenn Sie die Warteschlangen-URL benötigen, aber nur den Warteschlangennamen kennen, verwenden Sie eine der `AmazonSQSClient.GetQueueUrlAsync` Methoden.
+ Informationen zu den verschiedenen Warteschlangenattributen, die Sie festlegen können, finden Sie [CreateQueueRequest](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TCreateQueueRequest.html)in der [AWS SDK für .NET API-Referenz](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/) oder [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)in der [Amazon Simple Queue Service API-Referenz](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/).
+ In diesem Beispiel wird eine lange Abfrage für alle Nachrichten in der von Ihnen erstellten Warteschlange spezifiziert. Dies erfolgt mithilfe des `ReceiveMessageWaitTimeSeconds` Attributs.

  Sie können auch lange Abfragen während eines Aufrufs der `ReceiveMessageAsync` Methoden der [SQSClientAmazon-Klasse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSClient.html) angeben. Weitere Informationen finden Sie unter [Empfangen Amazon SQS SQS-Nachrichten](ReceiveMessage.md).

  Informationen zu kurzen Abfragen im Vergleich zu langen Abfragen finden Sie unter [Kurze und lange Abfragen](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html) im *Amazon Simple Queue Service* Developer Guide.
+ Eine Warteschlange für unzustellbare Nachrichten kann von anderen (Quell-) Warteschlangen gezielt für Nachrichten verwendet werden, die nicht erfolgreich verarbeitet wurden. Weitere Informationen finden Sie unter [Amazon SQS Dead-Letter-Warteschlangen](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) im Amazon Simple Queue Service Developer Guide.
+ Sie können die Liste der Warteschlangen und die Ergebnisse dieses Beispiels auch in der [Amazon SQS SQS-Konsole](https://console.aws.amazon.com/sqs) sehen.

# Amazon SQS SQS-Warteschlangen aktualisieren
<a name="UpdateSqsQueue"></a>

Dieses Beispiel zeigt Ihnen, wie Sie die verwenden, um eine Amazon SQS SQS-Warteschlange AWS SDK für .NET zu aktualisieren. Nach einigen Prüfungen aktualisiert die Anwendung das angegebene Attribut mit dem angegebenen Wert und zeigt dann alle Attribute für die Warteschlange an.

Wenn nur die Warteschlangen-URL in den Befehlszeilenargumenten enthalten ist, zeigt die Anwendung einfach alle Attribute für die Warteschlange an.

Die folgenden Abschnitte enthalten Auszüge aus diesem Beispiel. Der [vollständige Code für das Beispiel](#UpdateSqsQueue-complete-code) wird danach angezeigt und kann unverändert erstellt und ausgeführt werden.

**Topics**
+ [Queue-Attribute anzeigen](#UpdateSqsQueue-show-attributes)
+ [Überprüfen Sie den Attributnamen](#UpdateSqsQueue-validate-attribute)
+ [Warteschlangenattribut aktualisieren](#UpdateSqsQueue-update-attribute)
+ [Vollständiger Code](#UpdateSqsQueue-complete-code)
+ [Weitere Überlegungen](#UpdateSqsQueue-additional)

## Queue-Attribute anzeigen
<a name="UpdateSqsQueue-show-attributes"></a>

Das folgende Snippet zeigt die Attribute der Warteschlange, die durch die angegebene Warteschlangen-URL identifiziert werden.

Das Beispiel [am Ende dieses Themas zeigt, wie dieses](#UpdateSqsQueue-complete-code) Snippet verwendet wird.

```
    //
    // 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}");
    }
```

## Überprüfen Sie den Attributnamen
<a name="UpdateSqsQueue-validate-attribute"></a>

Der folgende Ausschnitt validiert den Namen des Attributs, das aktualisiert wird.

Das Beispiel [am Ende dieses Themas zeigt, wie dieser](#UpdateSqsQueue-complete-code) Codeausschnitt verwendet wird.

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

## Warteschlangenattribut aktualisieren
<a name="UpdateSqsQueue-update-attribute"></a>

Das folgende Snippet aktualisiert ein Attribut der Warteschlange, das durch die angegebene Warteschlangen-URL identifiziert wird.

Das Beispiel [am Ende dieses Themas zeigt, wie dieses](#UpdateSqsQueue-complete-code) Snippet verwendet wird.

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

## Vollständiger Code
<a name="UpdateSqsQueue-complete-code"></a>

Dieser Abschnitt enthält relevante Referenzen und den vollständigen Code für dieses Beispiel.

### SDK-Referenzen
<a name="w2aac19c15c29c19c25b5b1"></a>

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

Elemente der Programmierung:
+ [Namespace Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

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

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

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

### Der 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);
    }
  }

}
```

## Weitere Überlegungen
<a name="UpdateSqsQueue-additional"></a>
+ Um das `RedrivePolicy` Attribut zu aktualisieren, müssen Sie je nach Betriebssystem den gesamten Wert in Anführungszeichen setzen und die Anführungszeichen für die key/value Paare maskieren.

  Unter Windows ist der Wert beispielsweise ähnlich wie folgt aufgebaut:

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

# Löschen von Amazon SQS SQS-Warteschlangen
<a name="DeleteSqsQueue"></a>

Dieses Beispiel zeigt Ihnen, wie Sie die verwenden, um eine Amazon SQS SQS-Warteschlange AWS SDK für .NET zu löschen. Die Anwendung löscht die Warteschlange, wartet bis zu einer bestimmten Zeit, bis die Warteschlange gelöscht ist, und zeigt dann eine Liste der verbleibenden Warteschlangen an.

Wenn Sie keine Befehlszeilenargumente angeben, zeigt die Anwendung einfach eine Liste der vorhandenen Warteschlangen an.

Die folgenden Abschnitte enthalten Auszüge aus diesem Beispiel. Der [vollständige Code für das Beispiel](#DeleteSqsQueue-complete-code) wird danach angezeigt und kann unverändert erstellt und ausgeführt werden.

**Topics**
+ [Lösche die Warteschlange](#DeleteSqsQueue-delete-queue)
+ [Warten Sie, bis die Warteschlange weg ist](#DeleteSqsQueue-wait)
+ [Zeigt eine Liste vorhandener Warteschlangen](#DeleteSqsQueue-list-queues)
+ [Vollständiger Code](#DeleteSqsQueue-complete-code)
+ [Weitere Überlegungen](#DeleteSqsQueue-additional)

## Lösche die Warteschlange
<a name="DeleteSqsQueue-delete-queue"></a>

Das folgende Snippet löscht die Warteschlange, die durch die angegebene Warteschlangen-URL identifiziert wurde.

Das Beispiel [am Ende dieses Themas zeigt, wie dieses](#DeleteSqsQueue-complete-code) Snippet verwendet wird.

```
    //
    // 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.");
    }
```

## Warten Sie, bis die Warteschlange weg ist
<a name="DeleteSqsQueue-wait"></a>

Das folgende Snippet wartet, bis der Löschvorgang abgeschlossen ist, was 60 Sekunden dauern kann.

Das Beispiel [am Ende dieses Themas zeigt, wie dieser](#DeleteSqsQueue-complete-code) Codeausschnitt verwendet wird.

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

## Zeigt eine Liste vorhandener Warteschlangen
<a name="DeleteSqsQueue-list-queues"></a>

Der folgende Ausschnitt zeigt eine Liste der vorhandenen Warteschlangen in der Region des SQS-Clients.

Das Beispiel [am Ende dieses Themas zeigt, wie dieser Codeausschnitt](#DeleteSqsQueue-complete-code) verwendet wird.

```
    //
    // 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}");
    }
```

## Vollständiger Code
<a name="DeleteSqsQueue-complete-code"></a>

Dieser Abschnitt enthält relevante Referenzen und den vollständigen Code für dieses Beispiel.

### SDK-Referenzen
<a name="w2aac19c15c29c21c25b5b1"></a>

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

Elemente der Programmierung:
+ [Namespace Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

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

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

### Der 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}");
    }
  }
}
```

## Weitere Überlegungen
<a name="DeleteSqsQueue-additional"></a>
+ Der `DeleteQueueAsync` API-Aufruf überprüft nicht, ob die Warteschlange, die Sie löschen, als Warteschlange für unzustellbare Briefe verwendet wird. Ein ausgefeilteres Verfahren könnte dies überprüfen.
+ Sie können die Liste der Warteschlangen und die Ergebnisse dieses Beispiels auch in der [Amazon SQS SQS-Konsole](https://console.aws.amazon.com/sqs) sehen.

# Amazon SQS SQS-Nachrichten senden
<a name="SendMessage"></a>

Dieses Beispiel zeigt Ihnen, wie Sie Nachrichten AWS SDK für .NET an eine Amazon SQS SQS-Warteschlange senden, die Sie [programmgesteuert](CreateQueue.md) oder mithilfe der [Amazon](https://console.aws.amazon.com/sqs) SQS SQS-Konsole erstellen können. Die Anwendung sendet eine einzelne Nachricht an die Warteschlange und anschließend einen Stapel von Nachrichten. Die Anwendung wartet dann auf Benutzereingaben. Dabei kann es sich um zusätzliche Nachrichten handeln, die an die Warteschlange gesendet werden sollen, oder um eine Aufforderung zum Beenden der Anwendung.

Dieses und das [nächste Beispiel für den Empfang von Nachrichten](ReceiveMessage.md) können zusammen verwendet werden, um den Nachrichtenfluss in Amazon SQS zu sehen.

Die folgenden Abschnitte enthalten Auszüge aus diesem Beispiel. Der [vollständige Code für das Beispiel](#SendMessage-complete-code) wird danach angezeigt und kann unverändert erstellt und ausgeführt werden.

**Topics**
+ [Senden einer Nachricht](#SendMessage-send-message)
+ [Senden Sie einen Stapel von Nachrichten](#SendMessage-send-batch)
+ [Löscht alle Nachrichten aus der Warteschlange](#SendMessage-purge-messages)
+ [Vollständiger Code](#SendMessage-complete-code)
+ [Weitere Überlegungen](#SendMessage-additional)

## Senden einer Nachricht
<a name="SendMessage-send-message"></a>

Das folgende Snippet sendet eine Nachricht an die Warteschlange, die durch die angegebene Warteschlangen-URL identifiziert wird.

Das Beispiel [am Ende dieses Themas zeigt, wie dieses](#SendMessage-complete-code) Snippet verwendet wird.

```
    //
    // 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}");
    }
```

## Senden Sie einen Stapel von Nachrichten
<a name="SendMessage-send-batch"></a>

Das folgende Snippet sendet einen Stapel von Nachrichten an die Warteschlange, die durch die angegebene Warteschlangen-URL identifiziert wird.

Das Beispiel [am Ende dieses Themas zeigt, wie dieses](#SendMessage-complete-code) Snippet verwendet wird.

```
    //
    // 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.");
    }
```

## Löscht alle Nachrichten aus der Warteschlange
<a name="SendMessage-purge-messages"></a>

Das folgende Snippet löscht alle Nachrichten aus der Warteschlange, die durch die angegebene Warteschlangen-URL identifiziert wird. Dies wird auch als *Löschen* der Warteschlange bezeichnet.

Das Beispiel [am Ende dieses Themas zeigt, wie dieser](#SendMessage-complete-code) Codeausschnitt verwendet wird.

```
    //
    // 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}");
    }
```

## Vollständiger Code
<a name="SendMessage-complete-code"></a>

Dieser Abschnitt enthält relevante Referenzen und den vollständigen Code für dieses Beispiel.

### SDK-Referenzen
<a name="w2aac19c15c29c23c25b5b1"></a>

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

Elemente der Programmierung:
+ [Namespace Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

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

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

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

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

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

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

### Der 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}");
    }
  }
}
```

## Weitere Überlegungen
<a name="SendMessage-additional"></a>
+ Informationen zu verschiedenen Beschränkungen für Nachrichten, einschließlich der zulässigen Zeichen, finden Sie unter [Kontingente für Nachrichten](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-quotas.html#quotas-messages) im [Amazon Simple Queue Service Developer Guide](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/).
+ Nachrichten bleiben in Warteschlangen, bis sie gelöscht werden oder die Warteschlange gelöscht wird. Wenn eine Nachricht von einer Anwendung empfangen wurde, ist sie in der Warteschlange nicht sichtbar, obwohl sie noch in der Warteschlange vorhanden ist. Weitere Informationen zu Sichtbarkeits-Timeouts finden Sie unter [Amazon SQS-Sichtbarkeits-Timeout](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html).
+ Zusätzlich zum Nachrichtentext können Sie Nachrichten auch Attribute hinzufügen. Weitere Informationen finden Sie unter [Nachrichtenmetadaten](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html).

# Empfangen Amazon SQS SQS-Nachrichten
<a name="ReceiveMessage"></a>

Dieses Beispiel zeigt Ihnen, wie Sie die verwenden, AWS SDK für .NET um Nachrichten aus einer Amazon SQS SQS-Warteschlange zu empfangen, die Sie [programmgesteuert](CreateQueue.md) oder mithilfe der [Amazon](https://console.aws.amazon.com/sqs) SQS SQS-Konsole erstellen können. Die Anwendung liest eine einzelne Nachricht aus der Warteschlange, verarbeitet die Nachricht (in diesem Fall zeigt sie den Nachrichtentext auf der Konsole an) und löscht dann die Nachricht aus der Warteschlange. Die Anwendung wiederholt diese Schritte, bis der Benutzer eine Taste auf der Tastatur eingibt.

Dieses Beispiel und das [vorherige Beispiel zum Senden von Nachrichten](SendMessage.md) können zusammen verwendet werden, um den Nachrichtenfluss in Amazon SQS zu sehen.

Die folgenden Abschnitte enthalten Auszüge aus diesem Beispiel. Der [vollständige Code für das Beispiel](#ReceiveMessage-complete-code) wird danach angezeigt und kann unverändert erstellt und ausgeführt werden.

**Topics**
+ [Empfangen Sie eine Nachricht](#ReceiveMessage-receive)
+ [Eine Nachricht löschen](#ReceiveMessage-delete)
+ [Vollständiger Code](#ReceiveMessage-complete-code)
+ [Weitere Überlegungen](#ReceiveMessage-additional)

## Empfangen Sie eine Nachricht
<a name="ReceiveMessage-receive"></a>

Das folgende Snippet empfängt eine Nachricht aus der Warteschlange, die durch die angegebene Warteschlangen-URL identifiziert wird.

Das Beispiel [am Ende dieses Themas zeigt, wie dieses](#ReceiveMessage-complete-code) Snippet verwendet wird.

```
    //
    // 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.)
      });
    }
```

## Eine Nachricht löschen
<a name="ReceiveMessage-delete"></a>

Das folgende Snippet löscht eine Nachricht aus der Warteschlange, die durch die angegebene Warteschlangen-URL identifiziert wird.

Das Beispiel [am Ende dieses Themas zeigt, wie dieses](#ReceiveMessage-complete-code) Snippet verwendet wird.

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

## Vollständiger Code
<a name="ReceiveMessage-complete-code"></a>

Dieser Abschnitt enthält relevante Referenzen und den vollständigen Code für dieses Beispiel.

### SDK-Referenzen
<a name="w2aac19c15c29c25c21b5b1"></a>

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

Elemente der Programmierung:
+ [Namespace Amazon.sqs](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/NSQS.html)

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

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

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

### Der 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);
    }
  }
}
```

## Weitere Überlegungen
<a name="ReceiveMessage-additional"></a>
+ Um Long Polling anzugeben, verwendet dieses Beispiel die `WaitTimeSeconds` Eigenschaft für jeden Aufruf der `ReceiveMessageAsync` Methode.

  Sie können auch lange Abfragen für alle Nachrichten in einer Warteschlange angeben, indem Sie das `ReceiveMessageWaitTimeSeconds` Attribut beim [Erstellen](CreateQueue.md) oder [Aktualisieren](UpdateSqsQueue.md) der Warteschlange verwenden.

  Informationen zu kurzen Abfragen im Vergleich zu langen Abfragen finden Sie unter [Kurze und lange Abfragen](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html) im *Amazon Simple Queue Service* Developer Guide.
+ Während der Nachrichtenverarbeitung können Sie die Empfangsnummer verwenden, um das Timeout für die Nachrichtensichtbarkeit zu ändern. Informationen dazu finden Sie in den `ChangeMessageVisibilityAsync` Methoden der [SQSClientAmazon-Klasse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSClient.html).
+ Durch das `DeleteMessageAsync` bedingungslose Aufrufen der Methode wird die Nachricht unabhängig von der Einstellung für das Sichtbarkeits-Timeout aus der Warteschlange entfernt.