1

特定のサーバーの MSMQ 内のすべてのキューを簡単にクリアする方法をずっと探していました。キューを作成または削除する必要はありません。単にメッセージを消去するだけです。

4

2 に答える 2

4

@ジョシュア - 念のために、コードにいくつかのビットを追加しました。これにより、自動的に参照System.Messaging.dllされ、パブリック キューとプライベート キューの両方をクリアするか、パブリック キューのみをクリアするかを切り替えることができます。

#if INTERACTIVE
#r "System.Messaging.dll"
#endif

open System
open System.Diagnostics
open System.Messaging

//
[<RequireQualifiedAccess>]
module Queue =
    //
    let purgeByMachine includePrivateQueues (machineName : string) =
        let queues =
            let publicQueues = MessageQueue.GetPublicQueuesByMachine machineName
            if includePrivateQueues then
                let privateQueues = MessageQueue.GetPrivateQueuesByMachine machineName
                Array.append publicQueues privateQueues
            else
                publicQueues

        queues
        |> Array.iter (fun queue ->
            sprintf "Purging queue: %s" queue.QueueName
            |> Trace.WriteLine

            queue.Purge ())
于 2012-06-22T23:04:52.053 に答える
4

この答えを見つけるのに苦労したので、見つけたものを投稿することにしました。スクリプトと fsi の作成に関しては、おそらくいくつかのバリエーションがありますが、これが私の解決策でした。

これを含むスクリプトを作成します。

open System
open System.Messaging

let purgeQueue (server :string) =
    let qs = MessageQueue.GetPrivateQueuesByMachine server
    for q in qs do
        printfn "%O" q.QueueName
        q.Purge()

fsi と #r System.Messaging.dll を起動します。次に、このスクリプトをロードし、必要なサーバーで call purgeQueue を実行します。私の場合、箱に入っていたのでlocalhostを渡しました。

于 2012-06-22T19:43:27.057 に答える