Flex Gateway新着情報
Governance新着情報
Monitoring API Manager概念上、ルーターは多くの実行可能なルートと一連のパラメーター (1 つルートまたはすべてのルートの実行を処理するパラメーター、あるいはどのルートの実行も処理しないパラメーター) を受け取ることができる操作です。
複数の実行パスの候補を受け取る場合、ルートを使用する必要があります。ルートのパラメーターを使用すると、含まれているプロセッサーを実行する必要があるかどうかを判断できます。ステレオタイプは、含まれているチェーンのステレオタイプを定義するためにルートの宣言で使用できます。要素の DSL コンテンツには、パラメーター化された操作が含まれないため、ルートでは複雑なパラメーターをインラインで定義できません。
まず、Route
基本クラスを拡張して、モジュールで 1 つ以上のルートを宣言する必要があります。
public class WhenRoute extends Route {
@Parameter
@Optional
private boolean shouldExecute;
public boolean shouldExecute() {
return shouldExecute;
}
}
次に、いずれかのモジュールの操作として、ルーターメソッドを宣言します。RouterCompletionCallback
と共に 1 つ以上の Route
実装を受け取る操作は、ルーターとして登録されます。
@Extension(name = "Docs")
@Operations(ChoiceRouter.class)
public class DocsModule {
}
ChoiceRouter
クラスは、次のメソッドを定義します。
public void choice(WhenRoute when,
@Optional OtherwiseRoute otherwise,
RouterCompletionCallback callback) {
if (when.shouldExecute()) {
when.getChain().process(callback::success, (error, previous) -> callback.error(error));
} else if (otherwise != null && otherwise.shouldExecute()) {
otherwise.getChain().process(callback::success, (e, r) -> callback.error(e));
} else {
callback.success(Result.builder().build());
}
}
上記では、ルーターの宣言方法と、設定に基づいてどのようにルートが実行されるのかがわかります。ルートの実行は、各ルート自体がスコープであるかのようにチェーンを介して行われます。
ルーターを使用するには、ルーターパラメーターを設定して、その独自のパラメーターで各ルート宣言を追加します。
<flow name="logDecoratorSampleFlow">
<docs:choice>
<docs:when shouldExecute="#[payload != null]">
<http:request config-ref="config" path="/" method="GET"/>
</docs:when>
<docs:otherwise>
<logger message="Payload was null"/>
</docs:otherwise>
</docs:choice>
</flow>
これにより、payload
が null でないたびに when
ルートに含まれている http:request
操作が実行されます。null の payload
が到達すると、代替の otherwise
が実行されます。
バージョン 1.1 以降で使用可能
実行の終了時に実行前と同じイベントやメッセージを残すルーターを作成することが必要になる場合もあります。この種のルーターは、Void ルーターと呼ばれます。
Void ルーターを実装するには、メソッドに RouterCompletionCallback
ではなく VoidCompletionCallback
型の引数が必要です。このコールバックは、以前と同じように (success
および error
メソッドで) 使用します。ただし、このケースでは success
でどのパラメーターも受け取りません。
次の制限が適用されます。
ルーターには、操作とは異なる制限があります。定義上、ルーターは特定の設定や接続に依存したり、それらを受け取ったりすることはできません。