n個のメッセージキューからメッセージを受信するサービスがあります。ただし、メッセージキューサービスが再起動されると、メッセージ取得サービスはメッセージキューサービスが正常に再開した後でもメッセージの受信を停止します。メッセージキューサービスの再起動後にサービスがメッセージを受信しない
メッセージ検索サービスでスローされたMessageQueueExceptionを具体的に捕捉し、キューのBeginReceiveメソッドを再び呼び出そうとしました。しかし、メッセージキューサービスが再起動するのに2秒かそこらで、私は、約1875インスタンスの例外を取得し、StartListeningメソッドで別のMessageQueueExceptionがスローされたときにサービスが機能しなくなります。
メッセージキューサービスの再起動から回復するための洗練された方法はありますか?
この無限ループの問題に対処する必要がありますが、これは少し問題がありますが、あなたはそのアイデアを得ます。
MessageQueueExceptionが発生した場合は、RecoverQueueメソッドを呼び出します。サービスの再起動の結果である例外を受け取ると
private void RecoverQueue(MessageQueue queue)
{
string queuePath = queue.Path;
bool queueRecovered = false;
while (!queueRecovered)
{
try
{
this.StopListening(queue);
queue.Close();
queue.Dispose();
Thread.Sleep(2000);
MessageQueue newQueue = this.CreateQueue(queuePath);
newQueue.ReceiveCompleted += new ReceiveCompletedEventHandler(this.OnReceiveCompleted);
this.StartListening(newQueue);
LogUtility.LogInformation(String.Format(CultureInfo.InvariantCulture, "Message queue {0} recovered successfully.", newQueue.QueueName));
queueRecovered = true;
}
catch (Exception ex)
{
LogUtility.LogError(String.Format(CultureInfo.InvariantCulture, "The following error occurred while trying to recover queue: {0} error: {1}", queue.QueueName, ex.Message));
}
}
}
public void StopListening(MessageQueue queue)
{
queue.ReceiveCompleted -= new ReceiveCompletedEventHandler(this.OnReceiveCompleted);
}
はオーケーRecoverQueueメソッドのコード – chad