19

開発中に、Amazon SQS で偽のメッセージを大量に生成しています。すべてのメッセージを削除する小さなアプリを作成しようとしていました (開発中に頻繁に行うことです)。キューをパージするツールを知っている人はいますか?

4

9 に答える 9

48

スクリプトを書いたり、キューを削除したくない場合。キューの構成を変更できます。

  1. キューを右クリック >configure queue
  2. Message Retention period1 分 (設定可能な最小時間) に変更します。
  3. すべてのメッセージが消えるまでしばらくお待ちください。

この方法は、キューを削除せずにキュー内のすべてのメッセージを削除するのにうまく機能することがわかりました。

于 2013-03-18T23:29:28.713 に答える
10

2014 年 12 月の時点で、sqs コンソールのキュー アクション メニューにパージ キュー オプションが追加されました。

于 2014-12-17T17:53:38.640 に答える
8

ここに来て、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();
        }
    }
}
于 2011-10-20T11:42:27.827 に答える
5

キューの最初のアイテムを確認します。キューの最後のアイテムまでスクロールします。Shift キーを押しながらアイテムをクリックします。すべてが選択されます。

于 2014-04-21T15:35:29.587 に答える
4

キューを削除して再度作成するのが最善の方法だと思います.2つのリクエストだけです.

于 2011-12-12T12:11:58.907 に答える
0

AWS コンソールにアクセスできる場合は、Web UI を使用してキューを削除できます。

手順:

  • サービスに移動 -> SQS
  • 「QUEUE_NAME」でキューをフィルタ
  • キュー名を右クリック -> キューのパージ

これにより、キューをクリアするように要求されます。これは 5 秒または 10 秒程度で完了する必要があります。

この操作を実行する方法については、以下を参照してください。

キューを手動でパージする

于 2017-02-21T16:25:19.313 に答える