6.9. IM-MessageHub のシーケンス図¶
IM-MessageHub の処理のシーケンス図とその詳細を説明します。
6.9.1. メッセージ配信を受け付ける¶
IM-MessageHub は、メッセージ配信の依頼を受け付けた後、すぐにメッセージ配信アプリケーションに対してレスポンスを返します。受け付けたメッセージ配信の依頼は、非同期の配信処理タスクとして別スレッドで実行されます。これにより、メッセージ配信アプリケーションは、メッセージ配信処理の完了を待つこと無く、後続の処理を続けることが可能となります。メッセージ配信アプリケーションがメッセージを作成してから、IM-MessageHub に対して配信依頼を行うまでのシーケンス図は以下の通りです。
Name Description Client メッセージ配信アプリケーション Event jp.co.intra_mart.foundation.message_hub.model.Event Address jp.co.intra_mart.foundation.message_hub.model.Address Message jp.co.intra_mart.foundation.message_hub.model.Message MessageService jp.co.intra_mart.foundation.message_hub.service.MessageService ObjectInstanceSerializer jp.co.intra_mart.system.message_hub.util.ObjectInstanceSerializer TaskRegisterer jp.co.intra_mart.system.message_hub.task.TaskRegisterer シーケンスの詳細は以下の通りです。
メッセージ配信アプリケーションは、配信するメッセージがどの様なイベントによるものかを表すクラスを生成します。 メッセージ配信アプリケーションは、送信者/宛先のユーザのアドレス情報を表すクラスを生成します。 メッセージ配信アプリケーションは、前工程で作成したイベント、アドレス情報をもとにメッセージを作成します。 メッセージ配信アプリケーションは、作成したメッセージの配信処理を MessageService に依頼します。 MessageService は、受け付けたメッセージ配信処理を非同期の配信処理タスクとして登録します。その後、すぐにメッセージ配信アプリケーションに対してレスポンスを返します。以降、メッセージ配信に関わる処理は非同期で動作します。
6.9.2. メッセージを配信先メディアに配信する¶
IM-MessageHub は「 メッセージ配信を受け付ける 」で受け付けたメッセージを、登録されている配信先メディアに対して配信します。配信処理は以下の順に実行されます。
6.9.2.1. メッセージの配信を配信先メディアに依頼する¶
IM-MessageHub が受け付けたメッセージを解析し、配信先メディアごとの処理に分割するまでのシーケンス図は以下の通りです。
blockdiag loop (Async Process) MessageDispatchTas k ObjectInstanceSeri alizer UserAddressResolve r (UserAddressResolv erImpl) DeliveryMediaResol ver DeliveryMessage MessageDelivererWr apperByDividing 1―1 1―2 2 3 4 5 6-1 6-2 <<create>> run descrialize resolve resolverInner resolve <<create>> <<create>> deliver
Name Description (Async Process) 非同期処理 MessageDispatchTask jp.co.intra_mart.system.message_hub.task.MessageDispatchTask ObjectInstanceSerializer jp.co.intra_mart.system.message_hub.util.ObjectInstanceSerializer UserAddressResolver jp.co.intra_mart.foundation.message_hub.resolver.address.UserAddressResolver (UserAddressResolverImpl) UserAddressResolverの実装クラス DeliveryMediaResolver jp.co.intra_mart.foundation.message_hub.resolver.media.DeliveryMediaResolver DeliveryMessage jp.co.intra_mart.foundation.message_hub.delivery.model.DeliveryMessage MessageDelivererWrapperByDividing jp.co.intra_mart.system.message_hub.delivery.strategy.MessageDelivererWrapperByDividing シーケンスの詳細は以下の通りです。
非同期の配信処理タスクが生成され(1-1)、実行されます(1-2)。 配信を行うメッセージに設定されている送信者/宛先の情報を元に、ユーザ情報を解決します。 具体的なユーザ情報を解決するために、設定されている送信者/宛先の種類に適した UserAddressResolver の実装を呼び出します。 配信先メディアを解決します。 前工程で解決されたユーザ情報、配信先メディア情報をもとに配信メッセージを作成します。 メッセージを分割して配信を実行する MessageDelivererWrapperByDividing を生成し(6-1)、配信処理を委譲します(6-2)
6.9.2.2. メッセージを分割して配信を実行する¶
MessageDelivererWrapperByDividing クラスでは、配信処理を実行するために渡されたメッセージの宛先情報を解析します。宛先情報を解析した結果、必要であればメッセージを分割した上で、再度非同期の配信処理タスクを作成し、配信を依頼します。メッセージを分割して配信を実行する処理に関するシーケンス図は以下の通りです。
blockdiag MessageDelivererWr apperByDividing MessageDivideStrat egy TaskRegisterer (Async Process) MessageDeliveryTas k MessageDeliverer 1 2 3-1 3-2 4-1 4-2 divide register run <<create>> run <<create>> deliver
Name Description MessageDelivererWrapperByDividing jp.co.intra_mart.system.message_hub.delivery.strategy.MessageDelivererWrapperByDividing MessageDivideStrategy jp.co.intra_mart.foundation.message_hub.delivery.strategy.MessageDivideStrategy TaskRegisterer jp.co.intra_mart.system.message_hub.task.TaskRegisterer (Async Process) 非同期処理 MessageDeliveryTask jp.co.intra_mart.system.message_hub.delivery.strategy.MessageDeliveryTask MessageDeliverer jp.co.intra_mart.foundation.message_hub.delivery.MessageDeliverer シーケンスの詳細は以下の通りです。
MessageDelivererWrapperByDividing クラスが、MessageDivideStrategy を利用してメッセージを分割します。 分割したメッセージを、それぞれ非同期の配信処理タスクとして登録します。 分割したメッセージの配信処理を行うタスクが生成され(3-1)、実行されます(3-2)。 メッセージに設定されている宛先情報および配信先メディア情報から、実際に配信処理を行う MessageDeliverer クラスを生成し(4-1)、配信処理を実行します(4-2)。