Вывести в 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 доступны многие другие шаблоны интеграции и манипуляции с данными:
зависимости
Вам необходимо добавить:
- slf4j-api — SLF4J Logger API
- 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 публиковать несколько сервисов одновременно.
Читайте также: