una tutorial sqs simple que precios precio mensajes high diferencia cola aws amazon-sqs

amazon-sqs - tutorial - sqs high availability



La mejor manera de eliminar mensajes de SQS durante el desarrollo (9)

A partir de diciembre de 2014, la consola de sqs ahora tiene una opción de cola de purga en el menú de acciones de cola.

Durante el desarrollo, estoy generando muchos mensajes falsos en mi Amazon SQS. Estaba a punto de escribir una pequeña aplicación para eliminar todos los mensajes (algo que hago con frecuencia durante el desarrollo). ¿Alguien sabe de una herramienta para purgar la cola?


Compruebe el primer elemento en la cola. Desplácese hacia abajo hasta el último elemento en la cola. Mantener el turno, haga clic en el elemento. Todos serán seleccionados.


Creo que la mejor manera es cambiar el período de retención a 1 minuto, pero aquí está el código Python si alguien necesita:

#!/usr/bin/python # -*- coding: utf-8 -*- import boto.sqs from boto.sqs.message import Message import time import os startTime = program_start_time = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) ### Lets connect to SQS: qcon = boto.sqs.connect_to_region(region,aws_access_key_id=''xxx'',aws_secret_access_key=''xxx'') SHQueue = qcon.get_queue(''SQS'') m = Message() ### Read file and write to SQS counter = 0 while counter < 1000: ## For deleting 1000*10 items, change to True if you want delete all links = SHQueue.get_messages(10) for link in links: m = link SHQueue.delete_message(m) counter += 1 #### The End print "/n/nTerminating.../n" print "Start: ", program_start_time print "End time: ", time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())


Creo que la mejor manera sería eliminar la cola y crearla nuevamente, solo 2 solicitudes.


Para cualquier persona que haya venido aquí, busca una manera de eliminar los mensajes de SQS en masa en C # ...

//C# Console app which deletes all messages from a specified queue //AWS .NET library required. using System; using System.Net; using System.Configuration; using System.Collections.Specialized; using System.IO; using System.Linq; using System.Text; using Amazon; using Amazon.SQS; using Amazon.SQS.Model; using System.Timers; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Diagnostics; namespace QueueDeleter { class Program { public static System.Timers.Timer myTimer; static NameValueCollection appConfig = ConfigurationManager.AppSettings; static string accessKeyID = appConfig["AWSAccessKey"]; static string secretAccessKeyID = appConfig["AWSSecretKey"]; static private AmazonSQS sqs; static string myQueueUrl = "https://queue.amazonaws.com/1640634564530223/myQueueUrl"; public static String messageReceiptHandle; public static void Main(string[] args) { sqs = AWSClientFactory.CreateAmazonSQSClient(accessKeyID, secretAccessKeyID); myTimer = new System.Timers.Timer(); myTimer.Interval = 10; myTimer.Elapsed += new ElapsedEventHandler(checkQueue); myTimer.AutoReset = true; myTimer.Start(); Console.Read(); } static void checkQueue(object source, ElapsedEventArgs e) { myTimer.Stop(); ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(); receiveMessageRequest.QueueUrl = myQueueUrl; ReceiveMessageResponse receiveMessageResponse = sqs.ReceiveMessage(receiveMessageRequest); if (receiveMessageResponse.IsSetReceiveMessageResult()) { ReceiveMessageResult receiveMessageResult = receiveMessageResponse.ReceiveMessageResult; if (receiveMessageResult.Message.Count < 1) { Console.WriteLine("Can''t find any visible messages."); myTimer.Start(); return; } foreach (Message message in receiveMessageResult.Message) { Console.WriteLine("Printing received message./n"); messageReceiptHandle = message.ReceiptHandle; Console.WriteLine("Message Body:"); if (message.IsSetBody()) { Console.WriteLine(" Body: {0}", message.Body); } sqs.DeleteMessage(new DeleteMessageRequest().WithQueueUrl(myQueueUrl).WithReceiptHandle(messageReceiptHandle)); } } else { Console.WriteLine("No new messages."); } myTimer.Start(); } } }



Si no quieres escribir script o borrar tu cola. Puede cambiar la configuración de la cola:

  1. Haga clic derecho en la cola> configure queue
  2. Cambie el Message Retention period a 1 minuto (el tiempo mínimo que se puede configurar para).
  3. Espera un momento a que desaparezcan todos los mensajes.

Encontré que de esta manera funciona bien para eliminar todos los mensajes en una cola sin eliminar la cola.


Si tiene acceso a la consola de AWS, puede purgar una cola mediante la interfaz de usuario web.

Pasos:

  • Vaya a Servicios -> SQS
  • Filtra las colas por tu "QUEUE_NAME"
  • Haga clic derecho en el nombre de su cola -> Purgar cola

Esto solicitará que se elimine la cola y se debe completar con 5 o 10 segundos aproximadamente.

Vea a continuación para saber cómo realizar esta operación:


Opción 1: boto sqs tiene un método purge_queue para python:

purge_queue(queue) Purge all messages in an SQS Queue. Parameters: queue (A Queue object) – The SQS queue to be purged Return type: bool Returns: True if the command succeeded, False otherwise

Fuente: http://boto.readthedocs.org/en/latest/ref/sqs.html

Código que me funciona:

conn = boto.sqs.connect_to_region(''us-east-1'', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, ) q = conn.create_queue("blah") #add some messages here #invoke the purge_queue method of the conn, and pass in the #queue to purge. conn.purge_queue(self.queue)

Para mí, se eliminó la cola. Sin embargo, Amazon SQS solo le permite ejecutar esto una vez cada 60 segundos. Así que tuve que usar la siguiente solución secundaria:

Opción 2: Realice una purga consumiendo todos los mensajes en un bucle de tiempo y descartándolos:

all_messages = [] rs = self.queue.get_messages(10) while len(rs) > 0: all_messages.extend(rs) rs = self.queue.get_messages(10)