56

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

4

9 に答える 9

52

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

他の通信プロセスが使用できない可能性があるが、クライアントが選択した時点でメッセージを送信したい場合は、メッセージ キューを使用します。相手側のプロセスがウェイクアップし、メッセージの到着の通知を受け取ると、配信が行われます。

于 2008-12-30T12:20:13.363 に答える
44

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

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

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

MSMQ に関する情報:

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

Web サービスに関する情報:

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

于 2008-12-30T12:09:02.510 に答える
30

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

トランザクション キューは、任意の時点で接続されているかどうかに関係なく、さまざまな種類のメッセージをホスト間で非同期にルーティングするミドルウェア システムです。これは、メッセージをどこかに永続化することもできる必要があることを意味します。そのようなシステムの例は、MSMQIBM MQです。

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

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

  • 何か (ホスト A から開始された可能性がありますが、必ずしもそうではありません) がトランザクションをロールバックします。

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

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

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

ウェブサービス

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

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

IIRC、RESTFul サービスは冪等でなければなりません (同じサービスを何度でも呼び出した後、同じ状態が達成されます)。これは、Web サービス アーキテクチャでの成功/失敗の保証された通知の欠如に対処するための戦略です。 サービスを呼び出すのではなく、概念的に状態を書き込むという考え方なので、何度でも書き込むことができます。これは、サーバーから「成功」メッセージを受け取るまで投稿を再試行できるため、アプリケーションは成功に関するフィードバックの欠如を許容できることを意味します。

于 2008-12-30T13:06:11.117 に答える
22

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

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

--larsw

于 2008-12-30T12:26:45.267 に答える
8

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

ドットネットでMSMQを小さなコード行で使用できます。MessageQueueオブジェクトを宣言し、メソッドReceiveSendメソッドを呼び出すだけです。メッセージ自体は、通常の文字列またはバイナリデータにすることができます。

于 2008-12-30T14:01:49.757 に答える
2

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

于 2008-12-30T13:19:02.137 に答える
1

「MSMQ」の Google 検索からの上位のいくつかのリンクが役立つはずです...

http://msdn.microsoft.com/en-us/library/ms711472(VS.85).aspx

http://www.microsoft.com/windowsserver2003/techinfo/overview/msmqfaq.mspx

http://en.wikipedia.org/wiki/Microsoft_Message_Queuing

詳細はこちら: http://www.google.com/search?q=MSMQ

于 2008-12-30T12:11:25.017 に答える
0

MSMQ は Microsoft Messaging Queue の略です。

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

于 2014-07-21T11:00:23.423 に答える