SQSAmazon-Warteschlangen aktualisieren - AWS SDK for .NET

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.

SQSAmazon-Warteschlangen aktualisieren

Dieses Beispiel zeigt Ihnen, wie Sie die verwenden, AWS SDK for .NET um eine SQS Amazon-Warteschlange 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 Warteschlange in den Befehlszeilenargumenten enthalten URL 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 wird danach angezeigt und kann unverändert erstellt und ausgeführt werden.

Queue-Attribute anzeigen

Der folgende Ausschnitt zeigt die Attribute der Warteschlange, die durch die angegebene Warteschlange identifiziert wurden. URL

Das Beispiel am Ende dieses Themas zeigt, wie dieses 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

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

Das Beispiel am Ende dieses Themas zeigt, wie dieser 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

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

Das Beispiel am Ende dieses Themas zeigt, wie dieses 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

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

NuGet Pakete:

Elemente der Programmierung:

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

  • 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 Schlüssel/Wert-Paare maskieren.

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

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