#apache-camel #esb #apache-servicemix
#apache-camel #esb #apache-servicemix
Вопрос:
есть ли какой-либо способ маршрутизировать сообщение ServiceMix с помощью операции, указанной в этом сообщении?
Я пытался погуглить это, но не смог найти никакого способа выполнить эту простую задачу, может быть, я вообще делаю это неправильно?
У меня есть адаптер, который отправляет сообщения 2 типов. 2 других адаптера должны перехватывать их и выдавать ответ. Оба сообщения имеют идентичные тела (например, пусть это будет some <product>...</product>
), но операция отличается (например, update
и create
). Как мне перенаправить эти сообщения на разные адаптеры?
Заранее спасибо.
Ответ №1:
Используйте предикат Camel XPath (http://camel.apache.org/xpath.html ). Например:
from("queue:products").
choice().xpath("/product/[@create='true']")).to("queue:create").
otherwise().to("queue:update");
Комментарии:
1. Извините, но я имел в виду операцию JBI, а не какую-то пользовательскую операцию над моим объектом.
Ответ №2:
Нашел ответ здесь:http://fernandoribeiro.eti.br/2009/06/06/multiple-operations-in-apache-camel-routes /
import org.apache.camel.builder.RouteBuilder;
public final class SampleRouteBuilder extends RouteBuilder {
public void configure() {
from("jbi:service:http://www.fernandoribeiro.eti.br/SampleService")
.choice()
.when(header("jbi.operation")
.isEqualTo("{http://www.fernandoribeiro.eti.br}FirstOperation"))
.when(header("jbi.operation")
.isEqualTo("{http://www.fernandoribeiro.eti.br}SecondOperation"));
}
}