intra-mart Accel Platform IM-MessageHub プログラミングガイド 第3版 2021-04-01

6.9. IM-MessageHub のシーケンス図

IM-MessageHub の処理のシーケンス図とその詳細を説明します。

6.9.1. メッセージ配信を受け付ける

IM-MessageHub は、メッセージ配信の依頼を受け付けた後、すぐにメッセージ配信アプリケーションに対してレスポンスを返します。
受け付けたメッセージ配信の依頼は、非同期の配信処理タスクとして別スレッドで実行されます。
これにより、メッセージ配信アプリケーションは、メッセージ配信処理の完了を待つこと無く、後続の処理を続けることが可能となります。
メッセージ配信アプリケーションがメッセージを作成してから、IM-MessageHub に対して配信依頼を行うまでのシーケンス図は以下の通りです。

blockdiag Client Event Address Message MessageService ObjectInstanceSeri alizer TaskRegisterer <<create>> <<create>> <<create>> send serialize register

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
シーケンスの詳細は以下の通りです。
  1. メッセージ配信アプリケーションは、配信するメッセージがどの様なイベントによるものかを表すクラスを生成します。
  2. メッセージ配信アプリケーションは、送信者/宛先のユーザのアドレス情報を表すクラスを生成します。
  3. メッセージ配信アプリケーションは、前工程で作成したイベント、アドレス情報をもとにメッセージを作成します。
  4. メッセージ配信アプリケーションは、作成したメッセージの配信処理を MessageService に依頼します。
  5. 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 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)、実行されます(1-2)。
  2. 配信を行うメッセージに設定されている送信者/宛先の情報を元に、ユーザ情報を解決します。
  3. 具体的なユーザ情報を解決するために、設定されている送信者/宛先の種類に適した UserAddressResolver の実装を呼び出します。
  4. 配信先メディアを解決します。
  5. 前工程で解決されたユーザ情報、配信先メディア情報をもとに配信メッセージを作成します。
  6. メッセージを分割して配信を実行する MessageDelivererWrapperByDividing を生成し(6-1)、配信処理を委譲します(6-2)

6.9.2.2. メッセージを分割して配信を実行する

MessageDelivererWrapperByDividing クラスでは、配信処理を実行するために渡されたメッセージの宛先情報を解析します。
宛先情報を解析した結果、必要であればメッセージを分割した上で、再度非同期の配信処理タスクを作成し、配信を依頼します。
メッセージを分割して配信を実行する処理に関するシーケンス図は以下の通りです。

blockdiag MessageDelivererWr apperByDividing MessageDivideStrat egy TaskRegisterer (Async Process) MessageDeliveryTas k MessageDeliverer 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
シーケンスの詳細は以下の通りです。
  1. MessageDelivererWrapperByDividing クラスが、MessageDivideStrategy を利用してメッセージを分割します。
  2. 分割したメッセージを、それぞれ非同期の配信処理タスクとして登録します。
  3. 分割したメッセージの配信処理を行うタスクが生成され(3-1)、実行されます(3-2)。
  4. メッセージに設定されている宛先情報および配信先メディア情報から、実際に配信処理を行う MessageDeliverer クラスを生成し(4-1)、配信処理を実行します(4-2)。