Apache Camel: direct для новичков

от автора

Многие из вас давно работают с различными Java-фреймворками, их в опенсорсе целое множество, и у каждого есть свои преимущества и недостатки. Сегодня хотим обсудить Apache Camel, а именно, компонент direct. Эта статья от инженера-программиста Nexign Андрея Малыгина будет полезна тем, кто уже работает на этом фреймворке и хочет сделать свою работу чуточку легче.

Для чего нужен компонент direct

Программисты часто сталкиваются с проблемой очень большой длины маршрута в своем коде. А, как известно, чем он длиннее — тем больше вероятность допустить ошибку. 

Компонент direct в Apache Camel позволяет разбить один маршрут на много маленьких. Дробите их настолько, насколько вам этого захочется.

Давайте перейдём к конкретике. Наверное первый вопрос в работе с direct — «Что означает эта запись?». 

Рассмотрим простой транзитивный пример разбиения.

from("theSamePoint1").process(?).to("theSamePoint2");
from("theSamePoint1").to("direct:intermediatePoint"); from("direct:intermediatePoint").process(?).to("theSamePoint2");

В данном примере написаны два маршрута, которые выполняют одно и то же, только один записан с использование компонента direct, а другой нет.

Разработчики Apache Camel добавили этот компонент в самой первой версии фреймворка, и он стал самым используемым в приложениях.

Итак, углубимся в теорию

Direct (один из переводов с англ. «направлять»).

  1. Компонент direct обеспечивает прямой вызов между producer и consumer. Он позволяет подключаться исключительно изнутри Camel, поэтому внешние системы не могут отправлять сообщения непосредственно на него. Этот компонент используется в Camel для выполнения таких задач, как объединение маршрутов или тестирование.

  2. Эта конечная точка может использоваться только в одном и том же CamelContext.

  3. Компонент direct позволяет выполнять синхронный вызов маршрута. Для асинхронных вызовов он не подходит.

  4. Минимальные накладные расходы делают direct компонент отличным способом запуска маршрутов и синхронного разбиения маршрутов на несколько частей.

Закрепим на примере

Чтобы раскрыть суть компонента direct, рассмотрим одну из возможных ситуаций его использования. 

Например, мы используем этот компонент в качестве промежуточной точки. Тогда direct:»choosePoint» выполняет функцию фильтра, где может описываться логика перехода между точками.

Стоит отметить, что тут direct:»choosePoint» является необязательным промежуточным звеном. Но если бы он отсутствовал, для реализации логики данной программы нам пришлось бы писать очень много «копипастного» кода, что в программировании дурной тон.

Для наглядности покажем, как бы это выглядело без этой промежуточной точки:

from(theSame1Point).choice().when(?).to("direct:point1")) .otherwise().to("direct:point2");  from(theSame2Point).choice().when(?).to("direct:point1")) .otherwise().to("direct:point2");  from(theSame3Point).choice().when(?).to("direct:point1")) .otherwise().to("direct:point2");

Итоги, параметры и документация

Итак, повторим основные выводы.

Direct позволит вам легко произвести декомпозицию ваших задач. Сделайте из одного большого маршрута много простых и маленьких. Как результат — вы не допустите ошибок в бесконечном коде.

Надеемся, материал помог понятьчто вам стало понятно, что представляет собой компонент direct. Ну и, конечно, для самых пытливых читателей поделимся официальной документацией Apache Camel: доступные параметры компонента вы можете изучить по ссылке.


ссылка на оригинал статьи https://habr.com/ru/company/billing/blog/661797/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *