Учебники

Предохранитель JBoss — верблюжий концепт

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

CamelContext

Каждое приложение верблюда будет иметь по крайней мере один CamelContext. Это место, где мы добавляем верблюжьи маршруты. Это похоже на ApplicationContext из Spring.

Верблюжий контекст можно рассматривать как контейнер, который объединяет все вещи. В одном контексте верблюда может быть несколько маршрутов.

Маршруты

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

Конечная точка

Конечная точка — это конец канала, через который система может отправлять или получать сообщения. Это то, что мы называем местом назначения или источником на языке общения.

Компоненты

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

Компоненты

EIP

EIP расшифровывается как Enterprise Integration Pattern. Это идентифицированные и общеизвестные решения повторяющейся проблемы. Camel поддерживает большинство корпоративных шаблонов интеграции.

Контент-маршрутизатор

Шаблоны CBR позволяют нам направлять данные в соответствии с содержимым входного файла.

Контент-маршрутизатор

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

В следующем примере будут считаны данные из каталога D: / data / input . После прочтения он проверит тег значения внутри тега данных. Если тег значения содержит значение1 , он будет отправлен в D: / значение1. Если он содержит значение 2 , он будет отправлен в D: / значение2, и если ни один из них обоих, то он будет отправлен другим.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/data/input"/>
      <choice>
         <when>
            <xpath>/data/value = 'value1'</xpath>
            <to uri = "file:///D:/value1"/>
         </when> 
         <when>
            <xpath>/data/value = 'value2'</xpath>
            <to uri = "file:///D:/value2"/>
         </when>  
			
         <otherwise>
            <to uri = "file:///D:/others "/>
         </otherwise>
			
      </choice>
   </route>
</camelContext>

вход

D: /data/input/message1.xml

<data>
   <value>value1</value>
</data>

D: /data/input/message2.xml

<data>
   <value>value2</value>
</data>

Выход

D: / значение1 /

<data>
   <value>value1</value>
</data>

D: / значение2 /

<data>
   <value>value2</value>
</data>

Разветвитель

Шаблон разделения используется для разделения входных данных на более мелкие куски.

Разветвитель

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

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/inbox"/>
      <split streaming = "true">
         <tokenize token = "order" xml = "true"/>
         <to uri = "activemq:queue:order"/>
      </split>
   </route>
</CamelContext>

вход

D: /inbox/message.xml

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Выход

Если вы проверите AMQ, вы найдете 3 сообщения.

<order>
   <data>
      <value>value4</value>
   </data>
</order>

Список получателей

Шаблон списка получателей используется, когда необходимо получить список получателей из самого тела сообщения.

Список получателей

В следующем примере сообщение будет отправлено всем получателям, которые указаны в теге customer как список строк через запятую.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "jms:xmlOrders" />
      <recipientList>
         <xpath>/order/customer</xpath>
      </recipientList>
   </route>
</camelContext>

Другие EIP

Верблюд оказывает поддержку почти всем выявленным EIP. Некоторые из наиболее часто используемых EIP, как указано ниже.

  • Журнал — для регистрации полного сообщения или его части

  • Фильтр сообщений — фильтрация содержимого сообщений

  • Re-Sequencer — чтобы получить все токены в последовательности

  • Прослушка — для проверки путешествующих сообщений

Журнал — для регистрации полного сообщения или его части

Фильтр сообщений — фильтрация содержимого сообщений

Re-Sequencer — чтобы получить все токены в последовательности

Прослушка — для проверки путешествующих сообщений

Полный список EIP и их использование можно найти в официальной документации Camel http://camel.apache.org/eip.html.

Обработка исключений в Camel

Использование обработчика ошибок — это самый простой способ обработки исключений в Camel.

Чтобы использовать это, мы должны сконфигурировать bean-компонент класса обработчика ошибок и предоставить его в качестве ссылки на атрибут errorHandlerRef CamelContext .

<bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
   <property name = "logName" value = "mylogger.name"/>
   <property name = "level" value = "DEBUG"/>
</bean>

<camelContext errorHandlerRef =  loggingErrorHandler></camelContext>

Использование Try Catch наконец

Camel также поддерживает стиль Java Try Catch finally для обработки ошибок.

Как и в Java, он имеет следующие три блока:

  • Блок doTry содержит код, который может генерировать исключение.

  • Блок doCatch содержит код, который необходимо выполнить в случае исключения.

  • Блок doFinally содержит код, который должен выполняться независимо от исключения. Он всегда будет выполняться независимо от того, было ли вызвано исключение или нет.

Блок doTry содержит код, который может генерировать исключение.

Блок doCatch содержит код, который необходимо выполнить в случае исключения.

Блок doFinally содержит код, который должен выполняться независимо от исключения. Он всегда будет выполняться независимо от того, было ли вызвано исключение или нет.

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

<route>
   <from uri = "direct:start"/>
   <doTry>
      <process ref = "someProcesorThatmayFail"/>
      <to uri = "mock:result"/>
		
      <doCatch>
         <exception>java.io.IOException</exception>
         <exception>java.lang.IllegalStateException</exception>
         <to uri = "mock:catch"/>
      </doCatch>
		
      <doFinally>
         <to uri = "mock:finally"/>
      </doFinally>
		
   </doTry>
</route>

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

Развертывание пакета в Fuse

Запустите Fuse с помощью Fuse.bat / start.bat .

Если вы запускаете Fuse с помощью start.bat, используйте client.bat для подключения к Fuse. Вы должны получить пользовательский интерфейс, как показано на следующем скриншоте.

Развертывание пакета в Fuse

Это CLI для доступа к командам Karaf и Fuse.