Apache Camel은 다른 소스의 이벤트 및 정보를 처리하는 데 사용할 수있는 매우 실용적인 규칙 엔진 라이브러리입니다. VM, HTTP, FTP, JMS 및 파일 시스템에서도 다른 프로토콜에서 메시지를 전송하고 작동 로직 및 전송 로직 분리를 유지하여 메시지의 내용에 더 집중할 수 있습니다.
이 기사에서는 Java Language Apache Camel Entry 시연을 제공 할 것입니다.
먼저 Maven 프로젝트의 pom.xml을 만듭니다.
<? .org/2001/xmlschema-instance "xsi : schemalocation ="http://maven.apache.org/pom/4.0.0http://maven.apache.org/maven- v4_0.xsd "> <modelversisiinisiinisiinisiinisinisisinisition"> 4.0 . 0 </modelversion> Camel-Spring-Demo </group> <artifactid> 나온 l-spring-demo </artifactid> <버전> 1.0-snapshot </version> <packaging> jar </packaging> <properties> < project.build.sourceencoding> utf-8 </project.build.sourceencoding> <camel.version> 2.11.1 </camel.version> </properties> ency> <groupid> org.apache.camel </groupid> < artifactid> Camel-Core </artifactid> <버전> $ {camel.version} </version} </version} </version} </version} </version} </version} </dependency> <pectionency> org.slf4j </groupid> <arttifactid> slf4j-simple </artifactid> <버전> 1.7 .5 </버전> </의존성> </종속성> </project>여기에서는 Camel-Core.jar 패키지 만 사용합니다. 실제로 사용할 수있는 많은 실용적인 구성 요소를 제공합니다. 로그 레코드의 목적으로 SLF4J-Simple을 로그 레코드의 구현으로 사용하여 콘솔에서 출력을 볼 수 있습니다.
다음으로 라우팅 클래스 만 구성하면됩니다. 경로는 한쪽 끝에서 다른 쪽 끝으로 메시지를 전달하는 방법으로 정의됩니다. SRC/MAIN/JAVA/CAMELCOREDEMO/TIMERROUTEBUILDER.java 파일을 생성하고 매 초마다 프로세서에 메시지를 보내고 간단히 인쇄합니다.
Camelcoremo; import org.apache. 에서 ( "time : // timer1? period = 1000") .process (new Processor () {public void process (exchange msg) {log.info ( "processing {}", msg);}}위의 내용은이 예제의 모든 필요성이며 이제 컴파일하고 실행됩니다.
bash> mvn compilebash> mvn exec : java -dexec.mainclass = org.apache.camel.main.main -dexec.args = '-r camelcoremoroutebuilder'
여기서 우리는 Java 클래스의 주요 입구를 작성하지 않았습니다.
CAMELCONTEXT를 제어하십시오
낙타가 시작되면 낙타를 실행하는 방법에 대한 정보가 많이있는 CamelContext 객체를 만들고 우리가 만든 경로의 정의도 포함됩니다. 이제 CamelContext를 통해 더 많은 제어를 원한다면 기본 코드를 작성해야합니다. 나는 여기에 간단한 예입니다.
Camelcoremo; static void main (string [] args)은 예외 {void run () 예외 CamelContext (camelcamentext.addroutes); ); runtime.getRuntime () {public d run () {trylcontext.stop () {throw runtimeexception (e);}). WaitforsStop ();} RouteBuilder CreaterouteBuilder () {return new TimerRouteBuilder () {while (true) {try {thread.sleep (long. max_value);} catch (InterubedException e) {break;}}}CreterouteBuilder () 메소드에서 기존 TimerRouteBuilder 클래스를 재사용 한 것을 알 수 있습니다. 이제 우리의 메인 클래스는 CamelContext가 생성, 시작 및 중지 될 때 완전히 제어되었습니다. Context (CamelContext) 객체를 사용하면 경로 수준이 아닌 전역에서 낙타를 구성하는 방법을 제어 할 수 있습니다. Javadoc 링크는 모든 세터 방법을 제공하며 수행 할 수있는 작업을 연구 할 수 있습니다.
또한 주요 범주에서 소량의 코드를 제공해야합니다. 우선, 우리는 우아한 폐쇄 문제를 처리해야하므로 컨텍스트의 STOP () 메소드를 호출하기 위해 Java Closing 기능을 추가했습니다. 둘째, 컨텍스트가 시작된 후 스레드 블록을 추가해야합니다. 시작 후 메인 스레드를 차단하지 않으면 시작 후 간단히 종료되며 쓸모가 없습니다. CTRL+C 키를 눌러 프로세스를 종료 할 때까지 낙타를 서버와 같은 서비스로 실행합니다.
CamelContext를 시작하기 시작하는 메인 클래스를 향상시킵니다
위의 예만큼 메인 클래스 설정 코드를 처리하지 않으려면 Camel-Core가 제공하는 Camel.Main 클래스를 간단히 상속받을 수 있습니다. 이 클래스를 사용하면 컨텍스트가 자동으로 설정할 수있을뿐만 아니라 제어 프로세스가 실행되는 시간, 추적을 활성화하고 사용자 정의 경로 클래스를로드하는 등의 모든 추가 명령 줄 특성을 얻을 수 있습니다.
다음 예제를 재구성하면 코드는 다음과 같습니다.
Caredemo; import org.slf4j.*; 정적 void main (string [] args)은 예외 {main.enableHangupsupport (); ;}} 이제 Timermain2의 코드는 이전보다 적습니다. 시도 할 수 있습니다. 이전 기능과 동일해야합니다.
bash> mvn compilebash> mvn exec : java -dexec.mainclass = camelcoremo.timermain2 -dexec.args = '-t'
-t 옵션을 제공하면 경로 추적이 예약됩니다. 사용 -H는 사용 가능한 모든 옵션이 표시됩니다.
낙타의 등록 메커니즘으로 Bean을 추가하십시오
이전 TimerRouteBuilder 예에서는 코드에서 익명 프로세서를 만들었습니다. 이제 몇 가지 다른 Procesors를 모으려면 낙타 등록 메커니즘에 콩을 추가하면 코드 혼동이 더 잘 줄어 듭니다. Camel을 사용하면 레지스트리 공간에서 가공을 Bean으로 사용할 수있게 한 다음 Bean 구성 요소로만 호출해야합니다. 다음은 재구성 코드입니다.
Caredemo; import org.apache.camel 정적 void main (string [] args)은 {timerbeansmain main = main.enablehangupsupport (); ()). = 1000 ") .to ("bean : processBeybean1 ") .to ("bean : processagainbybean2 "); ents 프로세서 {public void process (exchange msg) {log.info ("First Process {} ", msg);}} 정적 클래스 Bean2는 프로세서 {public void process (exchange msg) {log.info ( "sec ond process {}", msg);}}}을 구현합니다.이제 경로 클래스는 더 간결하고 명확하며 동시에 처리 코드도 독립 클래스로 재구성되었습니다. 비즈니스 로직을 달성하기 위해 매우 복잡한 경로를 작성 해야하는 경우이 방법을 사용하면 코드를 더 잘 구성하고 테스트 할 수 있습니다. "레고"와 같이 재사용 할 수있는 포조 빈을 만들 수 있습니다. Camel의 레지스트리 공간은 다른 많은 용도로 사용될 수 있습니다. 예를 들어 많은 정보를 사용자 정의하거나 추가 기능으로 일부 정보를 등록하거나 스레드 풀 구현 전략 내에서 물건을 교체 할 수 있습니다.
위의 경로 예제는 So -Called Java DSL로 구성되어 있습니다.
이 기사가 낙타의 탐험 단계를 건너 뛰는 데 도움이되기를 바랍니다.