在开发期间从SQS删除消息的最佳方法

Hai*_*ter 18 amazon-sqs

在开发过程中,我在Amazon SQS上生成了大量虚假消息.我正准备编写一个小应用程序来删除所有消息(我在开发过程中经常这样做).有谁知道清除队列的工具?

rhi*_*ose 45

如果您不想编写脚本或删除队列.您可以更改队列配置:

  1. 右键单击队列> configure queue
  2. 更改Message Retention period为1分钟(可设置的最短时间).
  3. 等待所有消息消失.

我发现这种方式适用于删除队列中的所有消息而不删除队列.

  • 方便的技巧,但队列操作下现在有一个 **清除队列** 选项 (2认同)

Pau*_*key 10

截至2014年12月,sqs控制台现在在队列操作菜单中有一个清除队列选项.


Hai*_*ter 7

对于任何来到这里的人来说,寻找一种在C#中集体删除SQS消息的方法......

//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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

检查队列中的第一项.向下滚动到队列中的最后一项.按住shift,点击项目.全部将被选中.

  • 大笑 (3认同)