内部ハンドラーバッファ

Anypoint Runtime Manager エージェントでは、バッファをサポートする内部ハンドラーを簡単な方法で実装できます。このドキュメントでは、Runtime Manager エージェントの内部ハンドラーのバッファを実装し、設定する方法について説明します。

バッファ付き内部ハンドラーの実装

BufferedHandler 抽象クラス

バッファ付き内部ハンドラーを実装するには、​BufferedHandler<T>​ 抽象クラスを拡張する必要があります。上書きするメソッドは次のとおりです。

  • boolean canHandle(T message)

    メッセージが内部ハンドラーによって処理可能であれば true を返します。
  • boolean flush(Collection<T> collectionOfMessages)

    バッファに保存されているメッセージを外部サービスに送信する実装を提供します。

内部ハンドラーのバッファの設定

バッファ設定オブジェクト

内部ハンドラーにバッファサポートが含まれる場合は、​mule-agent.yml​ ファイル内でバッファを設定できます。次の表は、使用可能な設定パラメーターを示しています。

項目 説明 デフォルト値

type

バッファ種別。有効な値は、​MEMORY​ (メモリ) または ​DISK​ (ディスク) です。

retryCount

フラッシュメソッドで例外が発生した後に再試行する回数。

maximumCapacity

バッファに保持するイベントの最大数。

flushFrequency

フラッシュメソッドを実行する頻度 (ミリ秒)。

filePath

バッファファイルへのパス。種別が ​DISK​ (ディスク) のバッファにのみ有効です。

PATH/bufferFile

whenExhausted

バッファが枯渇したときに従う戦略。指定しない場合、バッファは自動的に拡張されます。有効な値は、​FAIL​ (失敗) と ​FLUSH.​ (フラッシュ) です。

なし

flushThreadsNumber

whenExhausted​ で定義した戦略が ​FLUSH​ (フラッシュ) (上記参照) である場合に、バッファが枯渇したときに FlushThreadExecutor によって使用されるスレッド数。

60

discardMessagesOnFlushFailure

true の場合、フラッシュが成功しなかったときにはメッセージがバッファに返されません。

false

バッファの最大容量は、バイト数ではなくイベント数に基づいて設定されます。イベントのサイズが大きく、​maximumCapacity​ を低い値に設定していない場合は、ヒープに負荷がかかり、アプリケーションのパフォーマンスに影響する可能性があります。

DISK​ (ディスク) バッファを設定した場合は、I/O 操作のパフォーマンスを改善するために、メモリ内バッファもインスタンス化されます。デフォルトでは、メモリバッファのイベント数は 10000 で、500 ミリ秒ごとにディスクにフラッシュし、各バッチには 10000 件のイベントが含まれます。これらの値は、それぞれシステムプロパティ ​agent.disk.buffering.cache.size​、​agent.disk.buffering.cache.flush.frequency​、​agent.disk.buffering.max.flushing.size​ で設定できます。

ディスクから外部システムへの 10000 件ずつのバッチのフラッシュと、​agent.disk.buffering.max.flushing.size​ プロパティは、Mule エージェントプラグインの 2.1.9 および 1.11.3 以降でサポートされています。

サンプルの ​mule-agent.yml​ ファイル

パブリッシャーでのバッファの設定

イベント追跡でのバッファの設定