В Apache Camel, когда следует внедрять процессор? - PullRequest
1 голос
/ 28 марта 2019

Я видел некоторых слушателей ActiveMQ на основе Apache Camel с классом маршрута, который передает сообщения в классы, которые реализуют интерфейс процессора. В других слушателях класс, обрабатывающий сообщения, не реализует Processor. Когда следует внедрять процессор?

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Краткий ответ: только тогда, когда вы обязаны .

Когда это возможно, предпочитают простые Java Beans с привязкой к компонентам .Вы можете автоматически добавить все, что вам нужно, из сообщения в вашем методе Бина.

Например, если вы вызовете следующий метод из вашего маршрута с помощью команды bean, вы получите тело сообщения в виде String и весь Exchange введен.

public String doSomething(String body, Exchange exchange)

Это своего рода волшебство: первый аргумент по умолчанию является телом, второй оценивается на основе типа Exchange.

Вы можете сделать вещи более прозрачными, если выиспользуйте аннотации привязки параметров :

public String doSomething(@Body String body, @Header("JMSCorrelationID"))

Если вы начнете реализовывать такие bean-компоненты, как это, вы почти никогда не будете реализовывать Processor снова.Бобы гораздо проще тестировать и они более переносимы (их можно использовать и в другом, не верблюжьем контексте).

Тем не менее, есть или были некоторые места, где необходима реализация Processor, но эти случаи все больше и больше исключались.Я понятия не имею, существуют ли некоторые из них, но, по крайней мере, я давно не реализовывал Processor.

1 голос
/ 28 марта 2019

Я думаю, вы должны использовать класс, который реализует Processor, когда вам нужно использовать различные функции текущего объекта Exchange, т.е. свойства, заголовки сообщений и т. Д. Вы можете использовать класс, который не реализует Processor - когда вы никак не зависите от текущего объекта Exchange - но намереваетесь вызвать метод для bean-компонента.

...