C#のコホート研究ノート:MSMQ入門

    I.はじめに

    MSMQサイバースペースフルMicrosoftメッセージキュー、Microsoftメッセージキューは、異なる複数のアプリケーション間でATMの相互通信を実現することで、アプリケーションが互いに通信する同じマシン上に分散させることができる、それはの分布に接続することができます任意の位置。その実装原理は次のとおりです。メッセージの送信者は、あなたが(私たちはメッセージを呼び出す)容器に情報を送信し、メッセージキュー(メッセージキュー)公共空間、ローカルまたはのシステムに保存したいですプログラムを受けたメッセージは、処理のためにキューからそれに送られ、その後、削除メッセージを配置します。

    メッセージメッセージの当事者の通信による情報渡す必要があります。

    キューの種類は次のとおりです。

    「パブリック・キューは、」全体「のメッセージ・キュー」ネットワークをコピーして、すべてのサイトFi回線によってアクセスすることができます。

    「プライベートキュー」ネットワーク全体が解除されていないが、逆に、彼らはローカルコンピュータのみが存在する上で利用可能です。プライベートキューは唯一のキューのフルパス名またはラベルを知るために、アプリケーションプログラムによってアクセスすることができます。

    「キュー管理は、」ネットワークで送信される特定の「メッセージ・キュー」メッセージで受信メッセージの確認応答が含まれています。あなたがメッセージキューコンポーネント管理キュー(あれば)を使用することを指定します。

    メッセージ「応答キュー」に応じて、アプリケーションに送信されたバックは、ターゲットアプリケーションがメッセージを受信含まれています。使用されるメッセージキューコンポーネントキュー所望の応答を(もしあれば)を指定します。

    長所:安定した、メッセージの優先度、オフライン機能とセキュリティ、保証されたメッセージの配信と、多くのビジネスプロセスの信頼性のフェイルセーフ機構の実装。

    欠点: MSMQは、エンドへのリアルタイムの相互作用の状況Serverクライアントのニーズに適していない、とき要求の応答遅延の数が多いです。

    第二に、インストール

    appwiz.cpl->入力してWindowsを回し、その場でいただけます - > Microsoftメッセージキュー(MSMQ)サーバー。

 

    インストールが成功し、入力compmgmt.msc->サービスおよび実行中のアプリケーションの後に - >メッセージキュー。

    第三に、例えば、ショー

    クラスプログラム
    { 
        静的な 無効メイン(文字列[] argsを)
        { 
            #region MSMQを取得
             // メッセージキュー、デフォルトのストレージ・パスを作成します。C:\ WINDOWS \ SYSTEM32 \ MSMQ \ストレージ
            IF(MessageQueue.Exists(@ " \プライベート$。 \ HelloMSMQ " ))
                MessageQueue.Delete(@" \プライベート$ \ HelloMSMQ。");    //は、メッセージキューHelloMSMQ削除
            IF(MessageQueue.Exists(@" \プライベート$ \ WorldMSMQを。" ))
                MessageQueue.Delete(@" \プライベート$ \ WorldMSMQ ");   // 删除消息队列WorldMSMQ 

            メッセージキューmqHello = MessageQueue.Create(@ " \プライベート$ \ HelloMSMQ。" ); 
            メッセージキューmqWorld = MessageQueue.Create(@ " \プライベート$ \ WorldMSMQ。" ); 

            // 发送消息 
            mqHello.Send(" こんにちは世界、私はこんにちはだ。"" mqHello1 " ); 
            mqHello.Send(" あなたは無料ですか?"" mqHello2 " ); 
            mqHello.Send(こんにちはこんにちは、" " mqWorld1 " ); 
            mqHello.Send(" 私は自由になりますね。" " mqWorld2 " ); 

            // 返回本机所有私有队列的消息
            foreachの(メッセージキューの項目 MessageQueue.GetPrivateQueuesByMachine(" cx168 ) )
            { 
                item.Formatter = 新しい XmlMessageFormatter(新しい 文字列 [] { " 可能System.String " }); 
                メッセージ[]メッセージ =item.GetAllMessages();
                foreachの(メッセージのメッセージのメッセージ)
                { 
                    Console.WriteLineを($ " レーベル:{} message.Labelボディ:{message.Body} " ); 
                } 
            } 

            // 返回指定队列的消息
            場合(MessageQueue.Exists(@ "\ プライベート$ \ HelloMSMQ " ))
            { 
                使用して(メッセージキューtheOne = 新しいメッセージキューを(@" 。\プライベート$ \ HelloMSMQ " ))
                { 
                    Console.WriteLineを(); 

                    //メッセージキューフォーマッタを設定し 
                    theOne.Formatter = 新新 XmlMessageFormatter(新しい新しい 文字列 [] { 可能System.String ;})
                     //がメッセージを受信しますが削除されません 
                    メッセージMSG = mqHello.Peekを(); 
                    Console.WriteLineを($ " レーベル:本体msg.Label} {。} {msg.Body " );
                     // 受信したメッセージを削除 
                    MSG = mqHello.Receive(); 
                    Console.WriteLineを($ " レーベル:msg.Label {体を}:{} msg.Body " ); 
                    MSG =mqHello.Peek(); 
                    Console.WriteLineを($ " レーベル:{} msg.Labelボディ:{msg.Body} " );
                    // 删除所有消息
                    mqHello.Purge(); 
                    Console.WriteLineを($ " mqHello数:{。mqHello.GetAllMessages()COUNT()} " ); 
                } 
            } 

            Console.Read()。
            #endregion 
        } 
    }

    結果は以下の通りであります:

 

    から参照:

    https://www.cnblogs.com/tenghoo/archive/2009/11/05/1596456.html

おすすめ

転載: www.cnblogs.com/atomy/p/12549598.html