web-dev-qa-db-ja.com

Microsoft Message Queuing(MSMQ)とは何ですか?どのように機能しますか?

MSMQ(Microsoft Message Queuing)を使用する必要があります。それは何ですか、何のためですか、どのように機能しますか? Webサービスとはどう違うのですか?

52
balaweblog

その名前が示すように、それは単なるキューマネージャーです。

オブジェクトを(シリアル化して)キューに送信して、受信するまでオブジェクトを保持できます。通常、アプリケーション間で切り離された方法でメッセージまたはオブジェクトを送信するために使用されます

Webサービスとは関係ありません。2つの異なるものです

MSMQに関する情報

https://msdn.Microsoft.com/en-us/library/ms711472(v = vs.85).aspx

WebServicesに関する情報

http://msdn.Microsoft.com/en-us/library/ms972326.aspx

41
juan

@Juanの答えにすべて敬意を払って、どちらも2つの切断されたプロセス、つまりプロセス間通信チャネル(IPC)間でデータを交換する方法です。メッセージキューは非同期ですが、Webサービスは同期です。異なるプロトコルとバックエンドサービスを使用してこれを行うため、実装は完全に異なりますが、目的は似ています。

他の通信プロセスが利用できない可能性がある場合にメッセージキューを使用したいが、それでもクライアントの選択時にメッセージを送信したい場合。配信は、相手側のプロセスが起動し、メッセージの到着通知を受信したときに発生します。

48
tvanfosson

トランザクションキュー管理101

トランザクションキューは、ある時点で接続されている場合とされていない場合があるホスト間で、ある種のメッセージを非同期的にルーティングするミドルウェアシステムです。つまり、メッセージをどこかに永続化できる必要があります。そのようなシステムの例は、 [〜#〜] msmq [〜#〜] および IBM MQ

トランザクションキューは 分散トランザクションに参加することもできます 。ロールバックはメッセージの破棄をトリガーできます。つまり、メッセージは at-most-once セマンティクスで配信されることが保証されているか、ロールバックされていない場合に配信が保証されます。次の場合、メッセージは配信されません。

  • ホストAはメッセージを投稿しますが、ホストBは接続されていません

  • 何か(おそらくホストAから開始されるとは限りません)がトランザクションをロールバックします

  • Bは、トランザクションがロールバックされた後に接続します

この場合、Bは、他の媒体を通じて通知されない限り、メッセージが存在することさえ認識しません。トランザクションがロールバックされた場合、これはおそらく重要ではありません。トランザクションがロールバックされる前にBが接続してメッセージを収集すると、ロールバックはBに対するメッセージの効果も逆転させます。

Aは、最大1回の配信を保証して、メッセージをキューに投稿できることに注意してください。トランザクションがコミットされている場合、ホストAは、メッセージが信頼できるトランスポートメディアによって 配信されたと想定できます。 トランザクションがロールバックされた場合、ホストAはメッセージの影響を想定できます。取り消されました。

Webサービス

Webサービスは、 リモートプロシージャコール またはその他のサービス(たとえば RESTFul APIの )であり、(通常)HTTPサーバーによって公開されます。これは同期要求/応答プロトコルであり、プロトコルに組み込まれた配信の保証はありません。サービスが正しく実行されたことを検証するのはクライアント次第です。通常、これは要求への応答または呼び出しのタイムアウトによって行われます。

後者の場合、Webサービスは最大1回のセマンティクスを保証しません。サーバーはサービスを完了し、応答の配信に失敗する可能性があります(サーバーの外部の何かが間違っている可能性があるため)。アプリケーションはこの状況に対処できなければなりません。

IIRC、RESTFulサービスはi等である必要があります(同じサービスが何度呼び出されても同じ状態になります)、これは、 Webサービスアーキテクチャの成功/失敗。概念的には、サービスを呼び出すのではなく、状態を書き込むので、何度でも書き込むことができます。これは、サーバーから「成功」メッセージを取得するまで投稿を再試行できるため、成功に関するフィードバックの欠如がアプリケーションで許容されることを意味します。

Windows Communication Foundation(WCF)をMSMQの上の抽象化レイヤーとして使用できることに注意してください。これにより、一方向の操作のみで、サービスを操作する感覚が得られます。

詳細については、以下を参照してください: http://msdn.Microsoft.com/en-us/library/ms789048.aspx

--larsw

22
larsw

実際、MSMQとWebServiceの間に関係はありません。プロセス間通信にMSMQを使用する(ソケット、Windowsメッセージング、マップメモリ​​も使用できます)。これは、誰かがメッセージをデキューするまでメッセージを保持するWindowsサービスです。メッセージはハードディスクに保存されるため、ソケットよりも信頼性が高いと言えますが、他のIPCテクニックよりも低速です。

ドットネットでMSMQを使用するには、MessageQueueオブジェクトを宣言してReceiveおよびSendメソッドを呼び出すだけで、コードの短い行を使用できます。メッセージ自体は、通常の文字列またはバイナリデータです。

8
Ahmed Said

皆が説明したように、MSMQはメッセージのキューとして使用されます。メッセージは、実際のデータ、オブジェクト、およびシリアル化してネットワーク経由で送信できるもののラッパーにすることができます。 MSMQには独自の制限があります。 MSMQ 1.0およびMSMQ 2.0には4MBのメッセージ制限がありました。この制限はMSMQ 3.0で解除されました。メッセージ指向ミドルウェア(MOM)は、メッセージングに大きく依存する概念です。 Enterprise Service Busの基盤はメッセージングに基づいています。これらの新しいテクノロジーはすべて、信頼性のある非同期データ配信のためにメッセージングに依存しています。

2
user49550
1
Greg Beech

MSMQ- Microsoftメッセージキュー:•MSMQは、Microsoftが開発したメッセージキューの実装です。 •Windows Serverオペレーティングシステムに展開しました。 •別のサーバー/プロセスで実行されているアプリケーションがフェイルセーフな方法で通信できるようにするメッセージングプロトコルです。 •MSMQは一般に、企業で構築されたソフトウェアに使用されています。 •MSMQは、目的の宛先に到達できないメッセージをキューに入れ、宛先に到達した後に再送信することにより、信頼性の高い配信を保証します。 •MSMQはトランザクションもサポートします。複数のキューで複数の操作を許可し、すべての操作を単一のトランザクションにラップすることで、すべての操作が有効になるか、まったく有効にならないようにします。 •メッセージキュー(MSMQ)テクノロジにより、異なる時間に実行されるアプリケーションは、一時的にオフラインになっている可能性のある異種ネットワークおよびシステム間で通信できます。次のポートは、Microsoftメッセージキュー操作に使用されます。•TCP:1801•RPC:135、2101 *、2103 *、2105 *•UDP:3527、1801

1
Sandeep Kumar

MSMQは、Microsoft Messaging Queueの略です。

フォーマットされた方法でメッセージを保存する単純なキューであるため、DBに渡すことができます(同じマシン上またはサーバー上)。そこにはさまざまなタイプのキューがあり、メッセージを分類します。メッセージ内に何らかの問題/エラーがあるか、無効なメッセージが自動的にデッドキューに送られた場合、それはそれ以上処理されないことを示します。ただし、メッセージをデッドキューに渡す前に最大カウントを再試行し、処理されなくなるまでデッドキューに送信できます。通常、クライアントマシンからサーバーまたはDBにログメッセージを送信するために使用され、クライアントマシンで問題が発生した場合、開発者またはサポートチームがログを調べて問題を解決できます。 MSMQは、ログファイルの記録を取得するためにMicrosoftが提供するサービスであり、ログファイルを使用して簡単に取得できるソリューションです。このブログからより良いアイデアを取得できます http://msdn.Microsoft.com/en-us/library/ms711472(v = vs.85).aspx

0
rhatwar007