0

私は次のPOJOを持っています:

public class MyPOJO {
    private Fizz fizz;
    private Buzz buzz;

    // ctor, getters, setters, etc.
}

そして、次のルート (Spring XML):

<route id="myroute">
    <from uri="timer://runOnce?repeatCount=1&amp;delay=10" />

    <to uri="bean:myPOJOFactory?method=newMyPOJO" />

    <!-- Not sure what to do here -->
    <!-- MyPOJO#Fizz should get routed to direct:fizzFarm. -->
    <!-- MyPOJO#Buzz should get routed to direct:buzzFarm. -->
</route>

どこmyPOJOFactoryにある:

public class MyPOJOFactory {
    public MyPOJO newMyPOJO(Exchange exchange) {
        Fizz fizz = new Fizz(true, 3);
        Buzz buzz = new Buzz("awesome");

        MyPOJO pojo = new MyPOJO(fizz, buzz);

        exchange.getOut().setBody(pojo);
    }
}

( BeanMyPOJO内で作成された) インスタンスをその構成要素とプロパティに分割し、一方向と別の方向にルーティングする方法が必要です。myPOJOFactoryFizzBuzzFizzBuzz

スプリッターについての私の理解では、それは交換の本体を取り、それを 2 つ以上のオブジェクトのコレクションに分割するだけです。しかし、これは私が望んでいることではないと思います。構成要素とフィールドにMyPOJO「分割」したいのですが、それらを別の宛先にルーティングしたいからです。おそらく行き、行きます。FizzBuzzFizzdirect:fizzFarmBuzzdirect:buzzFarm

Content-Based Router ( )についての私の理解では、条件ロジックをルート<choice/>に追加できるということです。しかし、私が必要としているのは条件付きではないため、これも必要だとif-else-ifは思いませMyPOJO#Fizzdirect:fizzFarmMyPOJO#Buzzdirect:buzzFarm

動的ルーターについての私の理解では、メッセージをさまざまな宛先に動的にルーティングしますが、その方法はまだよくわかりません。これが私が望むものだと思いますmyPOJOFactoryが、 Beanから出てくると、交換にはMyPOJOオブジェクトが含まれます。MyPOJO動的ルーターに送信する前に、最初に分割する必要があるように感じます。そうすれば、動的ルーターはメッセージが か かを明確に認識しFizzBuzz正しくルーティングできます。

したがって、動的ルーターと組み合わせてスプリッターを使用する必要があると思います。木を通して森を見ているのではありません。このようなもの:

<route id="myroute">
    <from uri="timer://runOnce?repeatCount=1&amp;delay=10" />

    <to uri="bean:myPOJOFactory?method=newMyPOJO" />

    <split>
        <tokenize token="Somehow split MyPOJO into Fizz and Buzz here" />
        <to uri="direct:dynrouter" />
    </split>

    <from uri="direct:dynrouter" />

    <dynamicRouter>
        <!-- ??? Somehow route Fizz to direct:fizzFarm, and Buzz to direct:buzzFarm
    </dynamicRouter>
</route>

これをどのように達成できるかについてのアイデアはありますか (#1 と に分割MyPOJOFizzBuzz#2 ルーターをルーティングFizzBuzzて別の宛先に設定する)?

4

1 に答える 1

3

その通りです。ロジックは常に同じなので、ルーターはやり過ぎかもしれません。

スプリッターは、ほとんどの場合、同じタイプのオブジェクトで使用されます (例: リストを分割し、各アイテムを個別に処理する)。

それで、Multicast EIPを提案できますか 、次のようなものが機能するはずです:

from("timer://runOnce?repeatCount=1&delay=10")
    .bean(myPOJOFactory.class)
    .multicast().to("direct:sendFizz", "direct:sendBuzz")

from("direct:sendFizz")
    .setBody(simple("${body.fizz"))
    .to("direct:fizzFarm")

from("direct:sendBuzz")
    .setBody(simple("${body.buzz"))
    .to("direct:buzzFarm")

(これは明らかに DSL 構文です。XML でも試すことができます)。

于 2013-12-19T14:47:24.880 に答える