Вывести в log сообщение camel

Обновлено: 16.05.2024

По своей сути Apache Camel – это механизм интеграции, который – проще говоря-может использоваться для облегчения взаимодействия между широким и разнообразным набором технологий.

2. Зависимости Maven

Для начала нам нужно будет включить зависимости для Spring Boot, Camel, Rest API с Swagger и JSON:

Последние версии зависимостей Apache Camel можно найти здесь .

3. Основной Класс

Давайте сначала создадим Spring Boot Приложение :

4. Конфигурации верблюда для пружинного ботинка

Теперь давайте настроим наше приложение с помощью Spring, начиная с файлов конфигурации (свойств).

Например, давайте настроим журнал для нашего приложения в файле application.properties в файле src/main/resources :

В этом примере показан файл application.properties , который также задает путь к конфигурации обратного входа. Установив IP-адрес на “0.0.0.0”, мы полностью ограничиваем доступ admin и management на веб-сервере, предоставляемом Spring Boot. Кроме того, мы предоставляем необходимый сетевой доступ к конечным точкам наших приложений, а также к конечным точкам проверки работоспособности.

Другим файлом конфигурации является файл application.yml . В нем мы добавим некоторые свойства, которые помогут нам вводить значения в маршруты нашего приложения:

5. Настройка сервлета Camel

Как уже упоминалось ранее, начиная с версии 2.18 и ниже Camel, мы можем воспользоваться преимуществами нашего application.yml – путем создания параметра для нашего конечного URL-адреса. Позже он будет введен в наш Java-код:

Возвращаясь к нашему классу Application , нам нужно зарегистрировать сервлет Camel в корне нашего контекстного пути, который будет введен из ссылки baeldung.api.path в application.yml при запуске приложения:

Начиная с версии 2.19 Camel, эта конфигурация была удалена, поскольку сервлет Camel по умолчанию установлен в “/camel” .

6. Построение маршрута

Давайте начнем создавать маршрут, расширив класс RouteBuilder из Camel и установив его как @Component , чтобы процедура сканирования компонентов могла найти его во время инициализации веб-сервера:

В этом классе мы переопределяем метод configure() из класса Camel RouteBuilder .

6.1. Маршрут конфигурации rest()

Затем мы создаем НОВОЕ объявление для конечных точек, которые мы планируем создать в методе rest Configuration() :

Здесь мы регистрируем контекстный путь с помощью нашего введенного атрибута из файла YAML. Та же логика была применена и к порту нашего приложения. CORS включен, что позволяет использовать эту веб-службу на разных сайтах. Режим привязки позволяет и преобразует аргументы в наш API.

Затем мы добавим документацию Swagger к URI, названию и версии, которые мы ранее установили. По мере создания методов/конечных точек для нашей веб-службы REST документация Swagger будет автоматически обновляться.

6.2. Маршрут отдыха()

Теперь давайте реализуем вызов метода rest() из метода configure () , перечисленного выше:

Этот метод довольно прост для тех, кто знаком с API. id – это идентификация маршрута внутри CamelContext . Следующая строка определяет тип MIME. Режим привязки определен здесь, чтобы показать, что мы можем установить режим в конфигурации rest() .

Метод post() добавляет операцию в API, генерируя конечную точку ” POST/be “, в то время как MyBean (обычный компонент Java с целочисленным идентификатором и строковым именем ) определяет ожидаемые параметры.

Наконец, метод to() создает мост к другому маршруту. Здесь он говорит Верблюду искать в своем контексте/движке другой маршрут, который мы собираемся создать, – который называется и определяется значением/id ” direct:… “, соответствующим маршруту, определенному в методе from () .

6.3. Маршрут from() С преобразованием()

При работе с Camel маршрут получает параметры, а затем преобразует, преобразует и обрабатывает эти параметры. После этого он отправляет эти параметры на другой маршрут, который пересылает результат на желаемый вывод (файл, базу данных, SMTP-сервер или ответ REST API).

В этой статье мы создаем только другой маршрут внутри метода configure () , который мы переопределяем. Это будет маршрут назначения для нашего последнего маршрута to() :

Наш пример готов, и мы можем попробовать его:

6.4. ПРОСТОЙ язык Сценариев

Мы также можем использовать его для выполнения простых преобразований, как было показано с помощью метода transform () .

6.5. Маршрут from() С процессом()

Давайте сделаем что – то более значимое, например вызов уровня сервиса для возврата обработанных данных. ПРОСТОЙ не предназначен для тяжелой обработки данных, поэтому давайте заменим transform() на process() метод:

Это позволяет нам извлечь данные в компонент, тот же самый, который ранее был определен в методе type () , и обработать его в нашем слое ExampleServices .

Поскольку ранее мы установили binding Mode() в JSON, ответ уже находится в правильном формате JSON, сгенерированном на основе нашего POJO. Это означает, что для класса Example Services :

7. Заключение

С помощью нескольких строк кода нам удалось создать относительно полное приложение. Все зависимости создаются, управляются и запускаются автоматически с помощью одной команды. Более того, мы можем создавать API, которые связывают воедино все виды технологий.

Этот подход также очень удобен для контейнеров, что приводит к созданию очень экономичной серверной среды, которую можно легко реплицировать по требованию. Дополнительные возможности конфигурации могут быть легко включены в файл конфигурации шаблона контейнера.

Этот пример REST можно найти на GitHub .

Наконец, помимо API filter() , process() , transform () и marshall () , в Camel доступны многие другие шаблоны интеграции и манипуляции с данными:

зависимости

Вам необходимо добавить:

  1. slf4j-api — SLF4J Logger API
  2. slf4j-log4j12 — Log4j как реализация логгера

Формат URI компонента журнала

Формат журнала URI:

Вы можете использовать параметры, чтобы установить уровень или параметры форматирования. Например:

В моем log4.properties корневой регистратор регистрирует в файл, а также в консоль, тогда как он регистрирует только в файл для категории com.javarticles . log4j.properties:

Примеры компонентов Camel Log

12:09| INFO | DefaultCamelContext.java 2454 | Apache Camel 2.15.1 (CamelContext: camel-1) started in 0.307 seconds

12:09| INFO | MarkerIgnoringBase.java 95 | Exchange[ExchangePattern: InOnly, BodyType: String, Body: Log me!]

12:09| INFO | DefaultCamelContext.java 2660 | Apache Camel 2.15.1 (CamelContext: camel-1) is shutting down

Custom Exchange Formatter

Я пытаюсь проверить маршрут Camel, который использует from(x).to(y).log("SuccessKey123") и onException(HttpOperationFailedException.class).log("ErrorKey123") .

Я получил его ;-) Ты меня правильно поменял. Спасибо!

Это мое решение:

Во-первых: создание пользовательского Appender

Краткое объяснение: с помощью метода append() мы добавляем каждое событие журнала в общедоступную статическую переменную logEvents. Позже в тесте мы можем получить доступ к logEvents.

Было немного сложно заставить этого appender работать с log4j. В моем случае я создал log4j2.xml в тестовых ресурсах src\test\resources\log4j2.xml .


Также есть файл конфигурации для настройки контекстного интерфейса и класса реализации интерфейса . это действительно хлопотно .


Теперь для загрузки CSDN требуются баллы . Раньше у меня было 0 баллов, что удобно для детской обуви с небольшим количеством баллов . Эй, CSDN изменился .

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

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

Apache Camel Endpoint публикует несколько сервисов одновременно

Любопытно, давайте проверим, может ли Camel публиковать несколько сервисов одновременно.

Читайте также: