1

Windows クラスターで Windows サービスとして実行されている TCP サーバーがあります。メッセージを受信し、キュー (MSMQ) に入れます。パブリック MSMQ キューを作成しました。そして、私はこのエラーメッセージを受け取ります:

System.Messaging.MessageQueueException (0x80004005): Message Queue service is not available.
   at System.Messaging.MessageQueue.MQCacheableInfo.get_WriteHandle()
   at System.Messaging.MessageQueue.StaleSafeSendMessage(MQPROPS properties, IntPtr transaction)
   at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)

この方法でメッセージをキューに送信します。

static void SendHelper(UncookedMessage uncooked)
{
    var msg = new Message(uncooked);
    msg.Formatter = new XmlMessageFormatter(new[] { typeof(UncookedMessage) });

    // (PER MESSAGE)
    msg.UseJournalQueue = false;
    msg.AttachSenderId = false;
    msg.Recoverable = true;

    SingleQueue.Send(msg);
}

キューのセキュリティにより、サーバーとクラスターで定義されたすべてのユーザーに完全なアクセス権が付与されます。私のキュー名は次のとおりです: FormatName:DIRECT=OS:application9\uncooked_message_single ; しかし、私はapplication9\ uncooked_message_single 、application9.domain.com\ uncooked_message_singleおよびFormatName:DIRECT=OS:application9.domain.com\uncooked_message_singleをテストしました。誰も働いていませんでした。

注:このアプリは、クラスター化されていないサーバー上のプライベート キューで完全に動作していました。Windows クラスタリングについてはよくわかりませんが、管理者によると、これはフェールオーバー クラスターであり、Windows Server 2012 上にあるとのことです。

4

1 に答える 1

0

エラー メッセージは、要求された MSMQ サービスを使用できないことを示しているため、これらが正しく設定されているかどうかを確認することをお勧めします。

クラスター構成について詳しく説明する前に、次のことをお勧めします...

  • ...クラスター化されたサーバー上のキューのアクセス権限を明示的に確認します(単一のクラスターノード上ではありません)。

  • ... ネットワーク内のメッセージをブロックしているファイアウォールがあるかどうかを確認します。

クラスタ化されていない環境でシナリオをうまく試したので、クラスタ化された環境では明らかに違いがあるかもしれません。

実際、クラスタ化されたサーバーで MSMQ をセットアップするには、クラスタ化されていないサーバーとは異なる構成が必要です。

MSMQサービスとサービスが各ハードウェア ノードDistributed Transaction Coordinator (DTC)で稼働していることを確認します。

フェールオーバー クラスター マネージャーで、MSMQ サービスと DTC サービスの両方をクラスター化されたリソースとして設定し、MSMQ をクラスター化された DTC に " dependendy" 依存するように構成しますMSMQ -> Properties -> Dependencies

クラスター化されたサーバーで使用するキューで、アクセス権限を再度確認することを忘れないでください。単一ノードでのキューのセットアップは機能しません。

これがすべての場合に必須かどうかはわかりませんが、クラスターでは、MSMQ の依存関係として構成されたファイル共有もあります。私の理解では、これにより、MSMQ が必要とする一時ファイルがノードの切り替え後も利用できるようになるはずです。

さらに、クラスター ノードのセットアップに非常に役立つ記事を 2 つ紹介します。構成が正しいことを段階的に確認するのに役立つ場合があります。

于 2013-03-08T08:33:00.420 に答える