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 に答える