使用powershell创建MSMQ消息的克隆/重复副本

时间:2012-12-28 18:21:33

标签: powershell msmq

我正在开发一个powershell实用程序,当队列被消费者进程耗尽时,它会通过添加现有消息的重复副本来维护专用队列上的最小消息数。

这就是我正在做的事情

[Reflection.Assembly]::LoadWithPartialName("System.Messaging") | out-null
[Reflection.Assembly]::LoadWithPartialName("System.Text") | out-null
.
.
$enum = $queue.GetMessageEnumerator2();

while($enum.MoveNext())
{
    #Strategy 1 - Re-add existing message to queue
    $message = $enum.Current;
    $queue.Send($message);

    #Strategy 2 - Add a dummy message to queue
    $messageClone = New-Object System.Messaging.Message;
    $queue.Send($messageClone);

    logInfo("Number of messages in Queue - " + $queue.GetAllMessages().Length);
}
.
.

我认为这不起作用,因为在将消息添加到队列后,消息总数保持不变。能否请您指出这种方法的问题?

1 个答案:

答案 0 :(得分:0)

好吧,我没有以正确的方式创建重复的消息。以下是此问题的解决方案

[Reflection.Assembly]::LoadWithPartialName("System.Messaging") | out-null
[Reflection.Assembly]::LoadWithPartialName("System.Text") | out-null
.
.
$enum = $queue.GetMessageEnumerator2();

while($enum.MoveNext())
{
    $tran = new-object System.Messaging.MessageQueueTransaction;
    $tran.Begin();

    #$msgContent
    $message = $enum.Current;

    $msg = new-object System.Messaging.Message;
    $msg.BodyStream = $message.BodyStream;
    $queue.Send($msg, $tran);

    $tran.Commit();          
}
.
.