我一直在寻找一种简单的方法来清除给定服务器的 MSMQ 中的所有队列。我不需要创建或删除队列,只需清除任何消息。
问问题
246 次
2 回答
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 回答
4
@Joshua - 我在您的代码中添加了一些额外的位,只是为了它。这会自动引用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 回答