ページの先頭行へ戻る
Interstage Big DataComplex Event Processing Server V1.1.0 開発リファレンス
FUJITSU Software

3.3.3 Socketアダプター

Socketアダプターの通信方式について説明します。

参考

Socketアダプターを使用する場合は、以下に示すパフォーマンス上の利点によりSOAP/HTTPアダプターに比べて高スループットを実現できます。

  • イベント送信アプリケーションは、CEPサーバ(入力アダプター)に接続した状態で複数のイベントデータを送信できます。TCP/IPのコネクションの確立および切断に伴うオーバーヘッドを解消できるため、スループットが向上します。

  • イベント送信アプリケーションは、CEPサーバ(入力アダプター)からの受信メッセージを待つことなく、イベントデータを連続して送信できます。CEPサーバからのレスポンス待ちに伴うタイムラグを解消できるため、スループットが向上します。
    (入力アダプターでロギング機能を使用しない場合のみ)

3.3.3.1 エンドポイント

Socketアダプターのエンドポイントは、CEPサーバのIPアドレスとSocketアダプターポート(任意のTCPポート)の組合せとなります。

Socketアダプターを利用する場合は、エンジン構成ファイルのSocketアダプターポートにイベントデータの待ち受けポートを指定する必要があります。

参照

Socketアダプターポートの指定方法については、「ユーザーズガイド」の「9.1.1 エンジン構成ファイル」を参照してください。

3.3.3.2 送信メッセージ

Socketアダプターに送信するメッセージについて説明します。

図3.1 送信メッセージのフォーマット

データフィールド

サイズ

指定値

イベントヘッダー

4バイト

イベントデータフィールドのデータサイズを指定します。(単位:バイト)

また、0を指定することで送信完了通知(イベント送信が完了したことを示す)をSocketアダプターに通知します。

指定可能範囲は0~33,000,000です。

イベントデータ

可変サイズ

イベントデータ(後述)を格納します。

イベントヘッダーフィールドが0(送信完了通知)以外の場合に、本フィールドを指定します。

図3.2 イベントデータフィールドのフォーマット

データフィールド

サイズ

指定値

イベントデータ形式

3バイト

“CSV”または“XML”(文字列)を指定します。

小文字での指定(“csv”または“xml”)も可能です。

イベントタイプID

サイズ

4バイト

イベントタイプIDの文字列長を指定します。(単位:バイト)

データ

可変サイズ

イベントタイプIDのテキストデータを指定します。

文字セット

サイズ

4バイト

文字セットの文字列長を指定します。(単位:バイト)

イベントデータの文字エンコーディングがUTF-8の場合、0を指定します。

データ

可変サイズ

文字セットのテキストデータを指定します。

UTF-8の場合、本フィールドは省略します。

イベントデータ本体

サイズ

4バイト

イベントデータ本体のサイズを指定します。(単位:バイト)

データ

可変サイズ

イベントデータのテキストデータを指定します。

次の場合に送信メッセージのバイト配列は以下のようになります。

  • イベントデータ形式:CSV形式

  • イベントタイプID:EVENTTYPE_01

  • 文字セット:シフトJIS

また、送信完了通知のバイト配列は以下のとおりです。

3.3.3.3 応答メッセージ

Socketアダプターから通知されるメッセージについて説明します。

図3.3 応答メッセージのフォーマット

データフィールド

サイズ

指定値

レスポンスコード

4バイト

入力アダプターの処理結果を示す4桁の文字列が格納されます。

<区切り>

1バイト

前後のフィールドの区切り文字として、コロン(:)(0x3A)が格納されます。

送信成功件数

可変サイズ

(0~19バイト)

入力アダプターにおけるイベントデータの処理成功件数が格納されます。(上限:LONG_MAX)

本フィールドは、10進数の文字列として通知されます。例えば、0件の場合は「0」(0x30)を表す1バイト、最大では2の63乗-1を表す19バイトのデータが格納されます。

<区切り>

1バイト

前後のフィールドの区切り文字として、コロン(:)(0x3A)が格納されます。

エラーメッセージ

可変サイズ

エラーメッセージの文字列が格納されます。

<終端>

1バイト

エラーメッセージの終端文字として、改行(LF)(0x0A)が格納されます。

ポイント

異常時にはシステムログおよびエンジンログにメッセージを出力します。異常時のエラー処理については、「3.4 エラー処理」を参照してください。

処理結果に応じたレスポンスコードおよび各種メッセージは以下のとおりです。

処理結果

レスポンスコードおよびメッセージ(*1)

正常終了

0000

Sending message completed normally.

なし

フォーマット異常

イベントデータのフォーマットのサイズが33,000,000バイトを超過

M001

Bad Message data size [イベントデータのフォーマットのサイズ].

cep10308e: Message Data Size is over. EngineId=CEPエンジン名, Size=イベントデータのフォーマットのサイズ

設定内容の不一致

不明なイベントタイプID

M002

Unknown event type id [イベントタイプ].

cep10108e: Event type is not found. EngineId=CEPエンジン名, eventType=イベントタイプID

フォーマット異常

イベントデータ形式にCSVまたはXML以外が指定されている

M003

Unknown event format [イベント形式].

cep10114e: Unknown Event format. EngineId=CEPエンジン名, format=イベント形式

フォーマット異常

送信メッセージのフォーマット誤り

M004

Data format is Abnormal.

cep10303e: Event data cannot read. Event is aborted. EngineId=CEPエンジン名,ClientIP=イベント送信元IPアドレス

フォーマット異常

不明な文字セット

M005

Charset is Abnormal [文字セット名称].

cep10304e: Charset Name is abnormal. EngineId=CEPエンジン名,CharsetName=文字セット名称

処理結果異常

イベントデータのデコードでエラー発生

M006

Decoding event data failed.

cep10309e: Decoding event data failed. EngineId=CEPエンジン名

設定内容の不一致

イベントデータ形式が配備されているイベントタイプ定義と異なる

M007

It differs from the registered format [イベント形式].

cep10116e: It differs from the registered format. EngineId=CEPエンジン名, format=イベント形式

フォーマット異常

イベントデータサイズが32,000,000バイトを超過

M008

Bad Event data size [イベントデータサイズ].

cep10310e: Event Data Size is over. EngineId=CEPエンジン名, Size=イベントデータサイズ

CEPサーバ未起動

S001

Server is not Running.

cep10300w: FrontServer is not running. Event is aborted. EngineId=CEPエンジン名

ビジー状態

CEPサーバが一時的または恒久的に過負荷状態

S002

Server is busy now.

cep10301w: FrontServer is busy. Event is aborted. EngineId=CEPエンジン名

または、

cep10302e: FrontServer is continuously busy. Event is aborted. EngineId=CEPエンジン名

処理結果異常

ログ出力処理が失敗

S003

Logging failed.

cep10401e: The Log was not able to be output. EngineId=CEPエンジン名, EVENT=受信イベント, ERRORINFO=内部情報

注:受信イベント中の改行はに変換されて出力されます。システムログに出力可能な長さを超えるイベントの場合、システムログにはイベントの途中まで出力されます。

(*1) 各段に記載している内容は以下のとおりです。

上段:レスポンスコード

中段:エラーメッセージ(可変情報は斜体で示しています)

下段:システムログおよびエンジンログの出力メッセージ(可変情報は斜体で示しています)

10件のイベントデータを送信した後に送信完了通知を送信した場合、メッセージ送信正常終了時の受信メッセージのバイト配列は以下のようになります。

3.3.3.4 Socket通信の処理手順

Socketアダプターを使用する場合のSocket通信(TCP/IP)を使用した接続から切断までの処理手順について説明します。

イベント送信アプリケーションは、以下に示す手順(処理フロー)に従って通信を行います。

処理手順:

  1. CEPサーバのSocketアダプターに接続します。(コネクション確立

  2. イベントデータを送信します。(メッセージ送信

  3. (必要に応じて)次のイベントデータを送信します。(→2.の繰り返し)

  4. 送信完了通知を送信します。

  5. CEPサーバからの応答メッセージを受信します。(メッセージ受信

  6. (必要に応じて)次のイベントデータを送信します。(→2.に戻る)

  7. イベントデータの送信がすべて完了した場合、接続を閉じます。(コネクション切断

参照

3.3.3.5 留意点

Socketアダプターを使用する上での留意点について説明します。

メッセージを連続して送信する場合

Socketアダプターで異常を検出した場合、送信完了通知を受信する前に応答メッセージを通知し、コネクションを閉じます。

この場合、イベント送信アプリケーションではメッセージ送信を継続できなくなる(データ送信がエラーとなる)ため、イベント送信アプリケーションはメッセージ送信を中断し、Socketアダプターからの応答メッセージを受信してください。

サイズ情報より小さいサイズのメッセージを送信した場合

サイズ情報に設定したデータサイズより小さいサイズのイベントデータを送信した場合、CEPサーバはサイズ分のデータ受信を待ち合わせるため、サイズ分のデータを送信するまで応答メッセージが通知されません。

イベント送信アプリケーションでは、サイズ情報とイベントデータのサイズを必ず一致させるようにしてください。

同時接続数について

Socketアダプターの最大同時接続数に上限はありません。OSのファイルディスクリプタ数の上限に達するまで接続可能です。

ただし、リソースの有効活用のため、イベント送信アプリケーションで送信を継続しない場合は、必ず接続を閉じてください。

ポイント

Socketアダプターで異常を検出しない限り、CEPサーバ側から接続を閉じることはありません。

入力アダプターでロギング機能を使用する場合

Socketアダプターは送信完了通知を契機にログ出力を行います。

そのため、イベント送信アプリケーションは、以下のように1メッセージ毎に送信完了通知を送信し、応答メッセージを受信してください。

1メッセージ毎に送信、応答メッセージの受信を行わない場合、応答メッセージの送信成功件数が正しく返却されない可能性があります。


フォーマンスに関する考慮

TCP/IP通信で小さなパケットを連続して送信する場合、受信側からのACKを受け取るまで送信メッセージをためておいて送信しようとするNagleアルゴリズムと、ACKをまとめて返信しようとするTCP遅延ACKとの両方の働きによって、通信のパフォーマンスが劣化することがあります。

イベント送信アプリケーションにおいては、小さなパケットが連続して送信されることを防ぐために、プログラミング言語のバッファー付きストリーム(Javaではjava.io.BufferedOutputStreamなど)を使用するようにしてください。

また、1メッセージ毎に送信完了通知を送信し、応答メッセージを受信する場合には、バッファー付きストリームを使用しても同じ原因で通信のパフォーマンスが劣化することがあります。そのような場合には、イベント送信アプリケーションにおいてNagleアルゴリズムを無効にするTCP_NODELAYオプションを設定することを検討してください。Javaではjava.net.SocketクラスのsetTcpNoDelayメソッドで設定可能です。