У меня есть следующий POJO:Apache Camel: Splitter, CBR или Dynamic Router?
public class MyPOJO {
private Fizz fizz;
private Buzz buzz;
// ctor, getters, setters, etc.
}
И следующий маршрут (Spring XML):
<route id="myroute">
<from uri="timer://runOnce?repeatCount=1&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);
}
}
Мне нужен способ в настоящее время раскол экземпляр MyPOJO
(созданный внутри компонента myPOJOFactory
) в его составную часть Fizz
и Buzz
, а маршрут Fizz
в одну сторону и Buzz
другой способ.
Мое понимания из Splitter является то, что он просто принимает тело обмена и разбивает его в коллекцию 2+ объектов. Но я не думаю, что это то, что я хочу, потому что, хотя я хочу, чтобы MyPOJO
«разделился» на свои составляющие поля Fizz
и Buzz
, я хочу, чтобы они перенаправлялись в разные пункты назначения. Возможно, Fizz
идет в direct:fizzFarm
и Buzz
переходит на direct:buzzFarm
.
Мой понимание из Content-Based Router (<choice/>
) является то, что она позволяет добавить условие if-else-if
логики в маршрут. Но я не думаю, что я хочу, это либо потому, что мне нужно, это не условное: Я всегда хочу MyPOJO#Fizz
идти к direct:fizzFarm
, и я всегда хочу MyPOJO#Buzz
пойти в direct:buzzFarm
.
Dynamic Router - это то, что он будет динамически маршрутизировать сообщения в разные пункты назначения, хотя пока не совсем уверен. I считаю, что это то, что я хочу, однако, исходя из боба myPOJOFactory
, обмен будет содержать объект MyPOJO
. Я чувствую, что должен сначала разделить MyPOJO
перед отправкой его в динамический маршрутизатор. Таким образом, динамический маршрутизатор сможет четко видеть, является ли сообщение Fizz
или Buzz
, и направьте его правильно.
Поэтому я считаю Мне нужно использовать сплиттер в сочетании с динамическим маршрутизатором. Я просто не вижу лес через деревья. Что-то вроде этого:
<route id="myroute">
<from uri="timer://runOnce?repeatCount=1&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 расщепление MyPOJO
в Fizz
и Buzz
и # 2 Настройка маршрутизатора для маршрутизации Fizz
и Buzz
различным направлениям)? Заранее спасибо!
Удивительный ответ, отличный совет! Это было легко преобразовать в Spring XML, еще раз спасибо! – IAmYourFaja
Приветствую вас! – vikingsteve