我正在开发一个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);
}
.
.
我认为这不起作用,因为在将消息添加到队列后,消息总数保持不变。能否请您指出这种方法的问题?
答案 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();
}
.
.