Apache Camel-Spring과 함께 사용

이제 Spring을 사용하여 이전 장에서 응용 프로그램을 다시 만들 것입니다. 이것은 DSL이 아닌 XML로 Camel 라우팅을 만드는 방법에 대한 아이디어를 제공합니다.

새 프로젝트 생성

새로 만들기 Maven 프로젝트를 지정하고 다음을 지정하십시오-

GroupId: BasketWithSpring
ArtifactId: BasketWithSpring

프로젝트의 기본 위치를 선택하거나 원하는 경우 원하는 디렉토리를 지정하십시오.

종속성 추가

이전 애플리케이션에서 사용한 핵심 종속성 외에도 Spring을 사용하려면 몇 가지 종속성을 더 추가해야합니다. 종속성은 pom.xml에 추가됩니다. 이제 pom.xml을 열고 다음 종속성을 추가하십시오.

<dependencies>
   ...
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.3.RELEASE</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.15.2</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.15.1</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
      <version>2.15.1</version>
   </dependency>
</dependencies>

Spring 용 Java DSL 생성

이제 새로운 Java 클래스를 생성하겠습니다. DistributeOrderXML. 그것에 다음 코드를 추가하십시오-

public class DistributeOrderXML {
   public static void main(String[] args) throws Exception {
      ApplicationContext appContext = new ClassPathXmlApplicationContext(
         "SpringRouteContext.xml");
      CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
      try {
         camelContext.start();
         ProducerTemplate orderProducerTemplate = camelContext.createProducerTemplate();
         InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
            .getResource("order.xml").getFile());
         
         orderProducerTemplate.sendBody("direct:DistributeOrderXML", orderInputStream);
      } finally {
         camelContext.stop();
      }
   }
}

에서 main 메서드, 먼저 인스턴스를 만듭니다. ApplicationContext, 이는 Spring 애플리케이션 내의 중앙 인터페이스입니다. 생성자에서 라우팅 및 필터링 정보가 포함 된 XML 파일의 이름을 지정합니다.

ApplicationContext appContext = new ClassPathXmlApplicationContext(
   "SpringRouteContext.xml");

다음으로 우리는 CamelContext 위에서 만든 지정 ApplicationContext 매개 변수에서.

CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);

이 시점에서 라우팅 및 필터링이 설정됩니다. 따라서 우리는CamelContext 그것의 사용 start방법. 이전의 경우와 마찬가지로 order.xml 파일을로드하기위한 Endpoint를 정의하고 처리를 시작합니다. 이제 라우팅이 XML에서 어떻게 정의되는지 이해하겠습니다.

애플리케이션 컨텍스트 생성

프로젝트에 새 XML 파일을 추가하고 호출하십시오. SpringRouteContext.xml. 다음 내용을 잘라내어이 파일에 붙여 넣습니다.

<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://camel.apache.org/schema/spring
      http://camel.apache.org/schema/spring/camel-spring.xsd ">
   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <route>
         <from uri = "direct:DistributeOrderXML"/>
         <log message = "Split by Distribute Order"/>
         <split>
            <xpath>//order[@product = 'Oil']/items</xpath>
            <to uri = "file:src/main/resources/order/"/>
            <to uri = "stream:out"/>
         </split>
      </route>
   </camelContext>
</beans>

여기에서 xpath 쿼리를 다음과 같이 정의합니다. 이제 "oil"에 대한 모든 주문을 선택합니다.

<xpath>//order[@product = 'Oil']/items</xpath>

출력 끝점은 여러 개입니다. 첫 번째 끝점은order 두 번째 폴더는 콘솔을 지정합니다.

<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>

응용 프로그램을 실행하십시오.

시험 결과

응용 프로그램을 실행하면 화면에 다음 출력이 표시됩니다.

<items>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Original</Type>
      <Quantity>4</Quantity>
      <Price>25</Price>
   </item>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Lime</Type>
      <Quantity>6</Quantity>
      <Price>30</Price>
   </item>
</items>

확인 order사용자가 지정한 경로의 폴더. 위의 XML 코드를 포함하는 새로 생성 된 파일을 찾을 수 있습니다.

결론

Camel은 통합 프로젝트를 용이하게하기 위해 EIP를 구현하는 즉시 사용 가능한 프레임 워크를 제공합니다. 도메인 별 언어 코딩과 XML 사용을 지원합니다.