SMTP連携サービスを利用することで、システム間で非同期なメッセージ交換が実現できます。
SMTP連携サービスでは、メッセージは、メールシステム(sendmail)を使用して、通常の電子メールとして送受信されます。
システム間でのメッセージ交換の概念モデルを図11.2 システム間のメッセージ交換に示します。
なお、SMTP連携サービスでは、送信側のメッセージキューを送信キューおよび受信側のメッセージキューを受信キューと呼びます。
図11.2 システム間のメッセージ交換
サーバアプリケーションAは、要求メッセージを作成し、そのメッセージヘッダの返信キュー名として受信キューa2を設定します。そして自システムの送信キューa1に送信します。送信したメッセージはシステムが自動的に対応する相手システムの受信キューb1に配送します。
一方アプリケーションBは、自システムにある受信キューb1から受信するように作成します。アプリケーションBは、受信した要求メッセージに設定されている返信キュー名を見て、送信キューb2に応答メッセージを送信します。ここで、アプリケーションBが要求メッセージを受信する際に、システムがメッセージヘッダに設定されている返信キュー名を受信キューa2から送信キューb2へ自動的に変換します。
メッセージキューの対応関係は、SMTP連携サービスの定義として指定するので、アプリケーションとは独立に設計することが可能です。アプリケーションは、システム間のメッセージ転送を意識することなく、システム内の通信と同様にメッセージ交換を行うことができます。
SMTP連携サービスでは、メッセージの送受信用に以下のメールアドレスを使用します。
MQD代表メールアドレスは、各MQDに1個必要です。このメールアドレスは、メッセージ送信のために使用され、MQD内のすべての送信キューで共用します。
メッセージ交換の形態別にメッセージキューとメールアドレスの対応関係を図11.3 メッセージキューとメールアドレスの対応関係 (1対1型の場合)、図11.4 メッセージキューとメールアドレスの対応関係 (集信型の場合)、および図11.5 メッセージキューとメールアドレスの対応関係 (配信型の場合)に示します。
図11.3 メッセージキューとメールアドレスの対応関係 (1対1型の場合)
図11.4 メッセージキューとメールアドレスの対応関係 (集信型の場合)
図11.5 メッセージキューとメールアドレスの対応関係 (配信型の場合)
SMTP連携サービスは、送信メッセージをMIME変換(エンコード)し、さらに暗号化が指定されている場合にはS/MIME変換(暗号化)を行った後、その送信キューに対応づけられたメールアドレスにメールとして送信します。
メッセージが送信キューに送信されると同時に、SMTP連携サービスは、転送を開始し、送信キュー上のメッセージがなくなるまで転送を続けます。何らかの理由で相手システムにメッセージが転送できない場合には、サービス環境定義(SMTP_MAINセクションのretryキーワード)で指定された時間間隔でメッセージの転送を試みます。サービス環境定義の詳細については、“11.3.3.1 サービス環境定義の記述”を参照してください。
SMTP連携サービスを使用したメッセージ送信の流れを図11.6 メッセージ送信の流れに示します。
図11.6 メッセージ送信の流れ
受信側では、sendmailがメールを受信すると、sendmailの.forward機能を利用してSMTP連携サービスの処理が行われます。SMTP連携サービスは、S/MIMEによる暗号化が行われているかどうかを調べ、暗号化されている場合は復号し、さらにMIME変換(デコード)を行った後、受信したメールアドレスに対応する受信キューへメッセージとして格納します。
sendmailがメールを受信すると、SMTP連携サービス(.forwardファイルで指定されたプログラム)が、メールの到着順にメッセージを受信キューへ格納します。ただし、“11.2.2 送信異常時のメッセージの扱い”で述べる“受信保留”が発生すると、メッセージの到着順序と受信キューへの格納順序が異なることがあります。 .forwardファイルの詳細については、“11.3 環境作成”を参照してください。
SMTP連携サービスを使用したメッセージ受信の流れを図11.7 メッセージ受信の流れに示します。
図11.7 メッセージ受信の流れ