私はアプリケーションに、ある機能を実行するために特定の順序でサービスチェーンを呼び出す必要がある単純なフローを指定しています。 Springの統合とそのDSLはこのシナリオに適しているようです。チェーン内の各ハンドラに異なるエラーハンドラを割り当てる
これらの個々のサービスのいずれかがチェーンを停止すべきその時点で、(これらのサービスは、外部アプリケーションへの呼び出しです)も失敗することもできます。これだけでなく、障害の発生したサービスに応じて、制御フローも別の場所にリダイレクトする必要があります。言い換えれば、私はサービスごとに異なるエラーハンドラが必要です。
問題は、私はこれを行う方法を見つけるの困難を抱えていると、誰かが正しい方向に私を指すことができれば、私はそれを感謝くらいでしょうです。これは私がこれまで問題に取り組んできた方法です:
@Configuration
@EnableAutoConfiguration
@IntegrationComponentScan
public class Application {
public static void main(String[] args) throws InterruptedException {
ConfigurableApplicationContext ctx =
SpringApplication.run(Application.class, args);
System.out.println(ctx.getBean(MySource.class).send("foo"));
ctx.close();
}
@MessagingGateway
public interface MySource {
@Gateway(requestChannel = "flow.input")
String send(String string);
}
@Bean
public IntegrationFlow flow() {
return f -> f
.handle(String.class, (i, map) -> {
// if (true){
// throw new RuntimeException();
// }
System.out.println(i);
return i + "a";
})
.handle(String.class, (i, map) -> {
System.out.println(i);
return i + "b";
})
.handle(String.class, (i, map) -> {
System.out.println(i);
return i + "c";
});
}
}
私はそれらのハンドラのそれぞれについて、エラーハンドラ/チャネルを設定することが、私は有益な何かを見つけることができませんでしたどのように検索してきました。
私はほとんど私の検索であきらめ、自分自身のコード(ため息)を書き始め、それはこのようなものになります。
public class FlowHarness {
public static void main(String[] args) {
Flow flow = FlowBuilder.flow()
.nextStep(i -> ((Integer)i) + 1, e -> System.out.println("failed at step 1"))
.nextStep(i -> ((Integer)i) + 1, e -> System.out.println("failed at step 2"))
.nextStep(i -> ((Integer)i) + 1, e -> System.out.println("failed at step 3"))
.build();
flow.execute(new Integer(1));
}
}
.nextStepの左側の引数を()ハンドラです右側の引数はエラーハンドラです。それは非常に単純ですが、私はそれがポイントを説明することを願っています。現実の流れの全てがビッグクラスで書くことができたとしても
私は独立したプライベートメソッド/クラスにサブフローのそれぞれを打破するために、より便利だろうと思います。どうもありがとう。
を提供することができました、ありがとう – edu