@ledsun blog

無味の味は佳境に入らざればすなわち知れず

非同期メッセージングとは

非同期メッセージングの動きを同期メッセージングと対比して整理します。

メッセージングとは

あるアプリケーションから別のアプリケーションへ情報を送る時の送り方です。 送る情報を「メッセージ」と呼びます。 同期メッセージングと非同期メッセージングがあります。

f:id:ledsun:20130625160728p:plain

アプリケーションA       メッセージ      アプリケーションB

動作の対比

応答を待つか?

同期メッセージングと非同期メッセージングではメッセージを送った後のアプリケーションの動きが違います。

メッセージを送ったあと

同期メッセージング応答を待つ
非同期メッセージング応答を待たずに次の処理を始める

例えば、電話では相手の応答を待ちますが、メールでは送信したら次の作業に取り掛かります。

メッセージの結果

メッセージの「結果」の受け取り方にも、同期メッセージングと非同期メッセージングでは違いがあります。

メッセージの応答に結果が

同期メッセージング含まれま
非同期メッセージング含まれません

非同期メッセージングでメッセージの結果が必要な場合は、アプリケーションAからアプリケーションBへ結果を取得するための同期メッセージを送るか、アプリケーションBから非同期メッセージで結果を送ります*1

例えば、通信販売では申し込みと同時に買えたことがわかりますが、懸賞応募では「当選者の発表は賞品の発送をもって代えさせていただきます」。

メッセージを処理するタイミング

アプリケーションAからアプリケーションBへ送るメッセージが複数の場合、同期メッセージングと非同期メッセージングでメッセージを処理するタイミング違います。

アプリケーションAとアプリケーションBがメッセージを処理をするタイミングが

同期メッセージング一致(同期)します。
非同期メッセージング一致しません(非同期)。

非同期メッセージングでは、アプリケーションAは結果を待たずにメッセージを次々と投げるので、メッセージを処理をするタイミングは一致しません。

例えば、受注処理は受け付け毎に随時行いますが、発送作業は定時に一括して行います。

対比のまとめ

応答結果処理のタイミング
同期メッセージング待つメッセージの応答で取得アプリケーション間で一致
非同期メッセージング待たない新規のメッセージで取得アプリケーション間で一致しない

参考図書

「1章 メッセージングパラダイムの理解」で同期メッセージと非同期メッセージの違いを解説しています。

Javaメッセージサービス

*1:この場合はアプリケーションBも結果の送信先を知っている1対1の通信になります。これをPoint-To-Pointメッセージングモデルと呼びます。例えばチャットアプリケーションはアプリケーションとしては同期メッセージングですが、ユーザまで含めたメッセージのやり取りのシステムとして見るとPoint-To-Point非同期メッセージングモデルです