apache camel単純ルーティング条件フィルタ
Camelでサポートされているルーティングルールは、Message Filter、Based Router、Dynamic Router、Splitter、Aggregator、Resequencerなど、非常に豊富です.Camelの公式文書では、これらのルーティング機能を表す非常にイメージ化されたグラフィックが使用されています(http://camel.apache.org/enterprise-integration-patterns.html):
1、最初のルーティングセレクタはヘッダ定義属性で判断する
ある条件が成立すると、後続の判断を行わずにそのまま終了する
2、いくつかのExpressionClauseの方法の使用
2.1 exchange
可以将
に改心
同じ効果が得られる
2.2 transfromとsetbody
Transform()戻り値ExpressionClause exchange(function)exchange情報の処理
(transformをsetbody()に変更することもできます)
その後の関数の戻り値をbody(exchange()やbody()など)に設定します.
たとえば、exchange()のメソッドの戻り値がexchange情報のリクエストボディに設定されている場合
同じように
Tはobjectクラス
evaluate()のメソッドの戻り値をexchange情報のリクエストボディの「SS」に設定
2.3body
1、パラメータclass
リクエストボディ内のオブジェクトが正しい場合は、次のステップに進みます.
2パラメータFunction functionメソッド戻り値object
TransFormToメソッドが入力するオブジェクトはbody値であり,戻り値に基づいている.
3、パラメータBiFunction,Object>メソッド戻り値object
o bodyのobjectオブジェクトstringObjectMapのヘッダオブジェクト
4、二つのパラメータclass,Function function
同様に2つの方法でbodyパラメータを入力するタイプを指定します.
5、2つのパラメータclass,BiFunction,Object>
同様に3つの方法でbodyパラメータを入力するタイプを指定します.
3、二つの違いを分析する
chioceはChoiceDefinitionクラスを返します
when(processor)を呼び出してChoiceDefinitionに戻る
from文を呼び出すとRouteDefinitionに戻ります
両方のクラスはprocessordDefinitionというクラスで大量のendPointを定義する方法を継承しています(詳細はソースコードを参照)
一方、when()を呼び出してメソッドがない場合はExpressionClauseに戻ります.
この類の中国語の紹介は:
DSLの式の句を表し、式が完了すると、句はDSLの別の部分に続きます.
すなわちwhen()を呼び出してこのクラスのメソッドで選択判断を行う.
多くのメソッドの戻り値は汎用Tである.上の例ではChoiceDefinitionであり,その後の判断操作を継続することができる.
具体的にはソースをご覧ください
1、最初のルーティングセレクタはヘッダ定義属性で判断する
public void configure() throws Exception {
from("timer://user?period=1000").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
in.setHeader("name","1");
in.setHeader("age","1");
}
}).choice()
.when(new Predicate() {
@Override
public boolean matches(Exchange exchange) {
return exchange.getIn().getHeader("name").equals("1");
}
}).process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("name");
}
})
.when(new Predicate() {
@Override
public boolean matches(Exchange exchange) {
return exchange.getIn().getHeader("age").equals("1");
}
}).process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("age");
}
})
.otherwise().process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("others");
}
}).endChoice();
}
ある条件が成立すると、後続の判断を行わずにそのまま終了する
2、いくつかのExpressionClauseの方法の使用
2.1 exchange
可以将
.when(new Predicate() {
@Override
public boolean matches(Exchange exchange) {
return exchange.getIn().getHeader("age").equals("1");
}
})
に改心
.when().exchange(exchange -> exchange.getIn().getHeader("age").equals("1"))
同じ効果が得られる
2.2 transfromとsetbody
.transform().exchange(this::transformTo)
public MessageBean transFormTo(Exchange exchange) {
MessageBean messageBean = new MessageBean();
messageBean.setAge(1);
messageBean.setId(1);
messageBean.setName("testName");
return messageBean;
}
Transform()戻り値ExpressionClause exchange(function)exchange情報の処理
(transformをsetbody()に変更することもできます)
その後の関数の戻り値をbody(exchange()やbody()など)に設定します.
たとえば、exchange()のメソッドの戻り値がexchange情報のリクエストボディに設定されている場合
同じように
.transform(new Expression() {
@Override
public T evaluate(Exchange exchange, Class type) {
System.out.println(exchange);
return (T)"SS";
}
})
Tはobjectクラス
evaluate()のメソッドの戻り値をexchange情報のリクエストボディの「SS」に設定
2.3body
1、パラメータclass
.when().body(TestBean.class)
リクエストボディ内のオブジェクトが正しい場合は、次のステップに進みます.
2パラメータFunction functionメソッド戻り値object
when().body(this::transFormTo)
TransFormToメソッドが入力するオブジェクトはbody値であり,戻り値に基づいている.
3、パラメータBiFunction,Object>メソッド戻り値object
when().body((o, stringObjectMap) -> "1".equals(o));
o bodyのobjectオブジェクトstringObjectMapのヘッダオブジェクト
4、二つのパラメータclass,Function function
.when().body(MessageBean.class ,messageBean -> messageBean.getAge());
同様に2つの方法でbodyパラメータを入力するタイプを指定します.
5、2つのパラメータclass,BiFunction,Object>
.when().body(MessageBean.class ,(messageBean,stringObjectMap) -> messageBean.getAge());
同様に3つの方法でbodyパラメータを入力するタイプを指定します.
3、二つの違いを分析する
chioceはChoiceDefinitionクラスを返します
when(processor)を呼び出してChoiceDefinitionに戻る
from文を呼び出すとRouteDefinitionに戻ります
両方のクラスはprocessordDefinitionというクラスで大量のendPointを定義する方法を継承しています(詳細はソースコードを参照)
一方、when()を呼び出してメソッドがない場合はExpressionClauseに戻ります.
この類の中国語の紹介は:
DSLの式の句を表し、式が完了すると、句はDSLの別の部分に続きます.
すなわちwhen()を呼び出してこのクラスのメソッドで選択判断を行う.
多くのメソッドの戻り値は汎用Tである.上の例ではChoiceDefinitionであり,その後の判断操作を継続することができる.
具体的にはソースをご覧ください