Как использовать верблюжьи конечные точки для управления файлами? - PullRequest
0 голосов
/ 06 ноября 2019

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

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

Я не совсем понимаю <camelContext> тег и как это работает. Я написал то, что следует до сих пор, где я просто пытаюсь записать в файл:

<citrus-camel:endpoint id="inputCamelEndpoint" camel-contxt="inputCamelContext" endpoint-uri="file://C:/HL7/source/?fileName=test.hl7"/>

<camelContext id="inputCamelContext" xmlns="http://camel.apache.org/schema/spring">
    <route id="inputRoute">
        <to uri="file://C:/HL7/source/?fileName=test.hl7"/>
    </route>
</camelContext>

<send endpoint="inputCamelEndpoint">
    <message type="plaintext">
        <data>Hello!</data>
    </message>
</send>

Что я должен написать для <from uri="">? А также, не нарушен ли атрибут xmlns camelContext? У меня эта ошибка .

Я действительно надеюсь, что кто-то может дать мне некоторые подробности обо всем этом, я совершенно потерян.

1 Ответ

0 голосов
/ 06 ноября 2019

Добро пожаловать в Stackoverflow! Я не слышал о Citrus Framework до того, как столкнулся с этим вопросом, но я немного знаю о Camel и постараюсь помочь вам с персонализированным Camel 101, чтобы помочь вам.

Перво-наперво

  • A CamelContext походит на среду выполнения для интегрированной платформы Apache Camel. Думайте об этом как о чем-то вроде Spring ApplicationContext. Все, что вы создаете с помощью Camel, живет в контексте.
  • Верблюд Маршрут - это конвейер обработки. Он принимает входные данные от чего-либо (http, jms, file ... почти все под солнцем ), применяет к нему ноль или более шагов обработки и производит вывод чего-либо (console, disk, http, .. вы называете это). Если мы рассмотрим простой маршрут, он может иметь два Endpoints. Конечная точка Consumer, которая потребляет Messages, один или несколько Processor компонентов, которые проверяют и обрабатывают входящие сообщения, и конечная точка Producer, которая отправляет окончательные сообщения куда-либо (как в хранилище на диск, печатает на тестовом терминале, сообщение HTTP). на сервер ...)

В вашем случае, насколько я понимаю, вам нужен Route, который может получить сообщение от Citrus Framework и сохранить его на диске, чтобы ваша системаПод тестом может обработать этот файл. Чтобы интерпретировать этот вариант использования в качестве определения маршрута, в XML DSL Camel.


<camelContext id="inputCamelContext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://camel.apache.org/schema/spring"
        xsi:schemaLocation="
            http://camel.apache.org/schema/spring
            http://camel.apache.org/schema/spring/camel-spring.xsd">
  <route id="inputRoute">
    <from uri="direct:citrusConsumer" />
    <to uri="file://C:/HL7/source/?fileName=test.hl7" />
  </route>
<camelContext/>

direct: URI представляет синхронную Consumer конечную точку [Документы по direct компоненту] . Этот пример маршрута состоит в том, чтобы взять любое входное сообщение, поступающее к потребителю (direct:direct:citrusConsumer), и записать его в файл с именем test.hl7 в каталоге C:/HL7/source/. Если вы хотите поиграть здесь, ознакомьтесь с дополнительными опциями для компонента File . Документация по интеграции Citrus-Camel также показывает использование компонента direct: с именем direct:news. Как только Route в приведенном выше примере кода Route готов, Citrus может отправить сообщение на direct:citrusConsumer, чтобы поговорить с Camel.

Повторно используя ваш пример кода, интеграция будет похожа на фрагмент кода ниже (Обратите внимание на изменение в endpoint-uri)

<citrus-camel:endpoint id="inputCamelEndpoint" camel-contxt="inputCamelContext" endpoint-uri="direct:citrusConsumer"/>

Надеюсь, это поможет вам продвинуться вперед.

...