2009-08-30 9 views
0

MSMQを使用してプライベートローカルキューに送信されたメッセージが実際に配信されたことをどのように確認しますか?私は特にリスナー(私の場合はC#サービス)が実行されていないため、配信が成功しないシナリオを考えています。MSMQ(C#)を使用したメッセージ配信の確認/確認

答えて

3

追加の手順を実行せずにキューに入ることが保証されます。 「実行していない受信者」のシナリオに対処するには、メッセージを処理するときに受信者をコーディングしてサーバーに戻す必要があります。元の送信者は、送信されたメッセージを追跡し、クライアントが受信したことを確認する責任があります。

これは、リモート処理またはWebサービスのシナリオではなく、MSMQを使用するかどうかを決定する際に行うべき決定の1つです。たとえば、緊急事態が発生したときに店舗のすべての店舗に通知するためのプロジェクトがありました(たとえば、製品リコール/食品安全性の問題)。リスニングを選択したので、送信者がリスナーの1人がリスンしていないことを示すエラーが表示された場合は、電話をかけて電話する必要があります。

覚えておいてください。

編集 - 明確化

私は本当に上記の2つのオプションが配りました。

  1. メッセージを受信したときに送信者にメッセージを送信するようにクライアントに指示します。
  2. remotingなどの別のオプションを使用して、クライアントが実行されているかどうかを検出してメッセージを受信できます。あなたは、メッセージがキューに到達したかどうかは、(正または負の確認応答を通じて)あなたは見つけることができますAcknowledgeTypeを指定することができ、メッセージを送信すると
+0

ちょうど明確である、あなたは*レシーバーが実行していたかどうかを調べることです。違いがあります。 –

+0

はい。それはまさに私が話しているシナリオです。 – David

+0

はい、それは尋ねられたものではありません(IMHO)。これはMSMQではなく、アプリの完全性に関するものです。 –

1

常にキューに送信されます。

あなたのサービスがそれを受け取るために実行されていない場合、サービスが受信するまで辛抱強く待っています。

.Send()がクラッシュすることなく返されるため、キューに送信されていることがわかります。

+0

実際にメッセージを出さずに待ち行列の数を問い合わせることはできますか? – Alex

+0

私は確信していません、私は試みたことはありません。 'MessageQueue.GetAllMessages()'がありますが、それらはそれらをキューからポップするかもしれません。 Windows Servers MMCスナップインがあなたに伝えることができるので、私はあなたができると思う。 –

+0

Peek()はこれを行いますか?それは試みに値します。 – David

1

を使用してこの情報を引き出すことができ、および/または待ち行列から受信されました。肯定応答はMSMQによってメッセージとしてAdministrativeQueueに送信されるので、そのプロパティをMessageオブジェクトに割り当ててください。

肯定応答の管理キューは、元のメッセージのIDである相関IDで確認できます。

関連する問題