1

我正在开发一个 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);
}
.
.

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

4

1 回答 1

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();          
}
.
.
于 2012-12-28T19:12:11.967 回答