MSMQ(Microsoft Message Queue)を使えば、アプリケーション開発者はメッセージの送受信を通じて迅速かつ確実にアプリケーションと通信できます。 メッセージ処理は、確実なメッセージングや多くのビジネスプロセスの実行に向けた信頼性の高いフェイルセーフな方法を提供します。
MSMQはXMLのWeb Servicesや.Netリモートと同様に分散開発技術です。 しかし、XML Web Servicesや.Net Remotingコンポーネントを使用する場合、クライアントはリアルタイムでサーバーと情報を交換する必要があり、サーバーはオンラインのままである必要があります。 MSMQはサーバーがオフラインの際に動作し、クライアント側のメッセージキューに一時的にメッセージを保存し、オンラインになったときにサーバーに送信して処理します。
明らかに、MSMQはクライアントがサーバーからタイムリーに応答する必要がある状況には適していませんし、MSMQは非同期的にサーバーとやり取りするため、サーバーの処理を長時間待つ必要はありません。
XML Web Servicesも.Netリモティングも非同期呼び出しを扱うための[OneWay]プロパティを提供しますが、これはサーバー側で長期間クライアント側を妨げる長いメソッド呼び出しの問題を解決するために使われています。 しかし、クライアントの負荷が大きい問題は解決できず、サーバーは処理速度よりも速くリクエストを受け付けてしまいます。
一般的に、[OneWay]属性は専門的なメッセージングサービスでは使用されません。
1. 基本的な用語と概念
「メッセージ」とは、2台のコンピュータ間で送信されるデータの単位です。 メッセージは非常に単純なもので、例えばテキスト文字列のみを含む場合もあります。 また、より複雑で埋め込まれたオブジェクトを含む場合もあります。
メッセージはキューに送られます。 「メッセージキュー」とは、メッセージの送信中にメッセージを保持するコンテナのことです。 メッセージキューマネージャーは、送信元から宛先へのメッセージを中継する際の仲介者として機能します。 キューの主な目的はルーティングを提供し、メッセージの配信を保証することです。 メッセージ送信時に受信者が不在の場合、メッセージキューはメッセージが正常に配信されるまで保持します。
「メッセージキューイング」は、Microsoft Windowsを搭載した任意のアプリケーションに対して、同じネットワーク上でもオンラインでも、任意のアプリケーションに対してメッセージ処理およびメッセージキューイング機能を提供するMicrosoftのメッセージ処理技術です。
「メッセージキューネットワーク」とは、互いにメッセージをやり取りできるコンピュータのグループを指します。 ネットワーク内の異なるコンピュータは、メッセージの円滑な処理を確保するために異なる役割を担っています。 メッセージの送信方法を決定するためのルーティング情報を提供するものもあれば、ネットワーク全体の重要な情報を保持するもの、そして単にメッセージの送受信を行うものもあります。
メッセージキューのインストール中、管理者はどのサーバーが互いに通信できるかを決定し、特定のサーバーに特別な役割を設定します。 この「メッセージキュー」のネットワークを構成するコンピュータは「サイト」と呼ばれ、互いに「サイトリンク」によってつながっています。 各サイトリンクには管理者が決定する「オーバーヘッド」があり、このサイトリンクを通じてメッセージがどれくらいの頻度で配信されるかを示します。
メッセージキュー管理者は、ネットワーク内に1台以上のコンピュータをルーティングサーバーとして設定します。 ルーティングサーバーは各サイトリンクのオーバーヘッドを分析し、複数のサイトを通じてメッセージを最速かつ効率的に届ける方法を判断し、メッセージの配信方法を決定します。
2. キュータイプ
キューには主に2種類あります:あなたやネットワーク内の他のユーザーが作成するキューとシステムキューです。
ユーザー作成キューは以下のいずれかである可能性があります:
パブリックキューはメッセージキューネットワーク全体に複製されており、ネットワークに接続されたすべてのサイトがアクセス可能です。
プライベートキューはネットワーク全体で公開されません。 代わりに、それらは所在するローカルのコンピュータ上でのみ利用可能です。 プライベートキューは、キューの完全なパス名またはラベルを知っているアプリケーションのみがアクセス可能です。
管理キューには、特定のメッセージキューネットワーク内で送信されたメッセージの受信を確認するメッセージが含まれています。 MessageQueueコンポーネントに使わせたい管理キュー(もしあれば)を指定します。
レスポンスキューには、送信アプリケーションがメッセージを受け取った際に返される応答メッセージが格納されています。 MessageQueueコンポーネントに使わせたいレスポンスキューを指定する(もしあれば)。
システムによって生成されるキューは、一般的に以下のカテゴリに分けられます。
ジャーナルキューは送信済みメッセージのコピーとキューから削除されたメッセージのコピーを保存するオプションがあります。 各メッセージキュークライアントの単一のジャーナルキューは、そのコンピュータから送信されたメッセージのコピーを保存します。 サーバー上の各キューごとに別途ダイアリーキューが作成されます。 このジャーナルは、そのキューから削除されたメッセージを追跡します。
デッドレターキューは、配信できないか期限切れのメッセージのコピーを保存します。 期限切れや配信不能なメッセージがトランザクションの場合、それは「トランザクションデッドレターキュー」と呼ばれる特別なデッドレターキューに保存されます。 死んだ文字は、期限切れのメッセージが保管されているコンピュータに保存されます。 タイムアウトおよび期限切れメッセージの詳細については、デフォルトメッセージプロパティをご覧ください。
レポートキューには、メッセージが目的地に到達する経路を示すメッセージが含まれ、テストメッセージも含まれます。 各コンピュータには報告キューは1つしかありません。
専用システムキューとは、システムがメッセージ処理作業を行うために必要な管理メッセージや通知メッセージを保存する一連の専用キューのことです。
アプリケーション内で行われる作業の大部分は、パブリックキューとそのメッセージへのアクセスに関わっています。 しかし、アプリケーションのジャーナリング、確認応答、その他の特別な処理ニーズに応じて、日々の運用では複数の異なるシステムキューが使用される可能性が高いです。
3. 同期通信 VS. 非同期通信
キュー通信は本質的に非同期的です。なぜなら、キューへのメッセージの送信と受信は異なるプロセスで行われるからです。 また、受信操作は非同期で実行可能で、メッセージを受け取りたい人は任意のキューにBeginReceiveメソッドを呼び出し、返信を待たずにすぐに他のタスクを続けられます。 これは人々が知っている「同期コミュニケーション」とは大きく異なります。
同期通信では、リクエストの送信者は他の作業を行う前に、意図された受信者からの応答を待つ必要があります。 送信者が待つ時間は、受信者がリクエストを処理し応答を送信するのにかかる時間に完全に依存します。
4. メッセージキューとのやり取り
メッセージ処理とメッセージングは、サーバーベースのアプリケーションコンポーネント間のプロセス間通信に強力かつ柔軟な仕組みを提供します。 これらは、コンポーネント間の直接呼び出しに比べていくつかの利点を持ちます。
安定性 – コンポーネント間の直接呼び出しよりもコンポーネント障害の影響ははるかに少なく、メッセージはキューに保存され、適切に処理されるまでそのまま残ります。 メッセージ処理はトランザクション処理に似ており、メッセージ処理が保証されています。 メッセージの優先順位付け – より緊急または重要なメッセージを比較的重要でないメッセージより先に受信できるため、重要なアプリケーションに対して十分な応答時間を保証できます。 オフライン機能 – メッセージを送信すると、一時的なキューに送られ、成功するまでそのまま残されます。 何らかの理由で目的のキューへのアクセスができない場合、ユーザーはその動作を進めることができます。 同時に、ネットワーク接続が復旧すればメッセージの配信が保証されるため、他の操作はメッセージが処理されたかのように継続できます。 トランザクションメッセージ処理 – 複数の関連メッセージを1つのトランザクションに結合し、メッセージが順次、一度だけ配信され、宛先キューから正常に取得できるようにします。 エラーがあれば、その取引全体がキャンセルされます。 セキュリティ – MessageQueueコンポーネントの基盤となるメッセージキューイング技術は、Windows Securityを利用してアクセス制御の安全、監査の提供、コンポーネントからの送受信メッセージの暗号化および認証を行います。
5. .Net環境でシンプルなメッセージキュープログラムを書く
(1) まずメッセージキューイングサービスをインストールする
コントロールパネルの「プログラムを追加/削除」から「Windowsコンポーネントを追加/削除」ステップからMSMQをインストールしてください。
MSMQはワークグループモードまたはドメインモードのいずれかでインストール可能です。 インストーラーがメッセージキューを実行し、ディレクトリサービスを提供するサーバーを見つけられない場合は、ワークグループモードでのみインストールでき、このコンピュータのメッセージキューはプライベートキューの作成と、メッセージキューを実行している他のコンピュータへの直接接続のみをサポートします。
(2) MSMQの設定
オープンコンピュータ管理 – メッセージキューイングとプライベートキューの下にあるMSMQDemo キューの作成
(3) コードを書く - 単にMSMQオブジェクトをデモンストレーションする
MessageQueueクラスは「メッセージキュー」をラッパー化したものです。 MessageQueueクラスはMessage Queueキューへの参照を提供します。 MessageQueueコンストラクタで既存リソースへのパスを指定することも、サーバー上で新しいキューを作成することもできます。 Send、Peek、Receiveを呼び出す前に、MessageQueueクラスの新しいインスタンスを既存のキューに関連付ける必要があります。
MessageQueueは、同期型と非同期型の2種類のメッセージ取得をサポートしています。 同期されたPeekおよびReceiveメソッドは、プロセススレッドが指定された間隔で新しいメッセージがキューに届くのを待つことを可能にします。 非同期のBeginPeekおよびBeginReceiveメソッドにより、メインアプリケーションタスクはメッセージがキューに到達する前に別のスレッドで実行を続けられます。 これらの手法は、コールバックオブジェクトや状態オブジェクトを用いてスレッド間の情報通信を促進することで機能します。
ソースコードダウンロード:
観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ 答える
|