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