Apache Camel 이란
아파치 카멜이란???
아파치 카멜(Apache Camel)은 라우팅, 중재 규칙 구성을 위한 API를 사용하여 Enterprise Integration Patterns의 자바 객체 기반 구현체를 제공하는, 규칙 기반 라우팅 및 중재 엔진을 갖춘 메시지 지향 미들웨어를 위한 오픈 소스 프레임워크
"아파치 캐멀," 위키백과, 2021년 12월 13일 (월) 15:59 수정, 2022년 3월 02일 접속,
https://ko.wikipedia.org/w/index.php?title=%EC%95%84%ED%8C%8C%EC%B9%98_%EC%BA%90%EB%A9%80&action=edit§ion=1
카멜의 개념 및 기본용어
엔트포인트(endpoint)
엔드포인트 라는 용어 는 프로세스 간 통신에 대해 이야기할 때 자주 사용됨.
ex) 클라이언트-서버 통신에서 클라이언트는 하나의 엔드포인트이고 서버는 다른 엔드포인트
컨텍스트에 따라 엔드포인트는 TCP 기반 통신을 위한 host:port를 참조하거나 해당 주소에서 연결할 수 있는 소프트웨어 엔터티 를 참조할 수 있음.
즉 엔드포인트는 서버와 클라이언트 두가지 역할을 할 수 있는데, www.example.com:80 형태로 자신이 클라이언트로서 접속할 수 있을 수도 있고, localhost:20200 형태로 자신이 서버역할을 할 수도 있음
Camel은 다양한 통신 기술로 구현된 엔드포인트에 대해 즉시 사용 가능한 지원을 제공
[Camel이 지원하는 엔드포인트 기술의 몇 가지 예]
- JMS 큐
- 웹 서비스
- 파일. file to file 지원
- FTP 서버
- 이메일 주소. 클라이언트로서 이메일 주소로 메시지를 보내거나 서버로서 메일 서버에서 들어오는 메시지를 읽음
- POJO(Java 객체)
Camel 기반 애플리케이션에서 일부 엔드포인트를 생성하고 이러한 엔드포인트를 라우트(route)와 연결함.
Camel은 이라는 Endpoint라는 가장 최상단의 Java 인터페이스를 가지고 있고 각 Camel 지원 엔드포인트에는 이 Endpoint인터페이스를 구현(implement)하는 클래스가 있음
카멜 컨텍스트(CAMELCONTEXT)
CamelContext객체는 Camel 런타임 시스템을 의미 . 하나의 애플리케이션(aplication)에는 하나의 CamelContext의 개체가 존재.
일반적인 애플리케이션은 다음 단계를 실행
- CamelContext 생성
- 엔드포인트(컴포넌트(component)와 함께 구성되는)를 CamelContext객체에 추가
- 엔드포인트간 연결을 지원해주는 라우트(route) 을 CamelContext객체에 추가
- CamelContext 객체 내 start()작업을 호출(invoke). 이로서 엔드포인트간 메시지의 전송, 수신 및 처리를 처리하는 데 사용되는 Camel 내부 스레드가 시작됨
- 향후에 CamelContext 객체에 대한 stop()작업을 호출합니다. 이렇게 하면 모든 엔드포인트와 Camel 내부 스레드가 정상적으로 중지
start()는 내부 스레드가 Component와 Endpoint를 시작한 다음 start()반환함.
반대로, 각 내부의 모든 스레드가 종료가 될때까지 CamelContext.stop()될 때까지 기다렸다가 반환됨(default가 300초였던것으로 기억)
CamelContext.start()을 호출하지 않으면 내부 스레드가 생성되지 않았기 때문에 메시지가 처리되지 않음
어플리케이션을 종료하기 전에 CamelContext.stop()을 하지않으면 일관성 없는 상태로 종료될 수 있음