Processor
Процессор - это обработчик, который обрабатывает сообщение произвольным образом.
Использование Processor в маршруте
После того как вы написали класс, реализующий интерфейс Processor, как в этом примере:
public class MyProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
// выполняем действия...
}
}
Вы можете легко использовать его внутри маршрута, объявив bean в Spring, например, через XML (или зарегистрировав его в JNDI, если это ваш Registry):
<bean id="myProcessor" class="com.acme.MyProcessor"/>
Затем в Camel вы можете сделать следующее:
from("activemq:myQueue").to("myProcessor");
Использование DSL process
В вашем маршруте вы также можете использовать синтаксис DSL process для вызова процессора.
Processor myProcessor = new MyProcessor();
...
from("activemq:myQueue").process(myProcessor);
Если вам нужно найти процессор в Registry, тогда вы должны использовать DSL processRef:
from("activemq:myQueue").processRef("myProcessor");
Зачем использовать process, если можно использовать to?
Метод process может быть использован в маршрутах как анонимный внутренний класс:
from("activemq:myQueue").process(new Processor() {
public void process(Exchange exchange) throws Exception {
String payload = exchange.getIn().getBody(String.class);
// выполняем действия с нагрузкой и/или обменом
exchange.getIn().setBody("Измененное тело");
}
}).to("activemq:myOtherQueue");
Этот подход удобен для быстрого написания кода. Если код во внутреннем классе становится более сложным, рекомендуется рефакторить его в отдельный класс. Этот подход лучше использовать, если вы не планируете повторно использовать этот процессор. С точки зрения повторного использования, не рекомендуется следовать этому подходу.
Превращение процессора в полноценный компонент
Существует базовый класс ProcessorEndpoint, который поддерживает полную семантику конечной точки для экземпляра Processor.
Поэтому вам просто нужно создать класс Component, производный от DefaultComponent, который возвращает экземпляры ProcessorEndpoint. Для получения более подробной информации смотрите раздел Создание компонентов.