본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/spring

apache Camel 정리

by 미노드 2022. 12. 16.

아파치 프로그램 중에서 Camel 이라는게 있다.

EIP(Enterprise Integration Patterns) 기반의 오픈소스 통합 연계 프레임워크이며 스프링 프레임워크와 연계해서 동작가능하다.

CAMEL(Concise Application Message Exchange Language)

약어와 같이 Camel은 다른 시스템간 메시지 교환(Exchange), 전송을 위해 사용한다.
즉, 시스템 통합(System Integrations)을 위한 자바 프레임워크이다.

HTTP를 사용하여 HTTP, ActiveMQ, JMS, JBI, SCA, MINA 또는 CXF와 같은 모든 유형의 전송 또는 메시징 모델 처리가능.
Java 응용 프로그램에 쉽게 포함될 수 있도록 최소한의 종속성을 가진 작은 라이브러리로, 매우 유연하게 조합되어 고도로 독립적인 Java 코드라도 카멜의 어떤 부분에서든 쉽고 빠르게 확장이 가능
어떤 종류의 Transport가 사용되는지에 관계없이 동일한 API로 작업 할 수 있게 해줌

Route 기반으로 동작하며, 유효성 검사 및 배포를 위해 여러 Maven 플러그인이 제공
다음 프로젝트는 Apache Camel을 라우팅 및 조정 엔진으로 활용할 수 있다.
Apache ServiceMix - 인기있는 분산 오픈 소스 ESB 및 JBI 컨테이너
Apache ActiveMQ - 성숙하고 널리 사용되는 오픈 소스 메시지 브로커
Apache CXF - 스마트 웹 서비스 스위트 (JAX-WS 및 JAX-RS)
Apache Karaf - 애플리케이션을 배포 할 수있는 소형 OSGi 기반 런타임
Apache MINA - 고성능 NIO 기반 네트워킹 프레임 워크

Camel의 구성요소

CamelContext
Camel의 핵심 런타임 API로 컴포넌트, 프로서서, EndPoint, 데이터 타입, 라우팅 등을 관리한다.
CamleContext에 의해서 다양한 모듈이 로딩되고 관리된다.

라우트 (Route)
컴포넌트, 프로세서들의 연속적인 메시지 연결의 정의다.
시스템 간 혹은 시스템 내부에서 정의된 메시지 연결 플로우로 메시지가 어디서/어떻게/ 어디로흘러갈지 정의한다.
Camel 라우트는 메시지 플로우가 1:1 혹은 1:N , N:1 등 다양하게 정의될 수 있다. 

컴포넌트 (Component)
Endpoint URL을 가지는 Camel이 메시지를 라우팅 할 수 있는 프로그램 단위다.
통신 프로토콜을 구현한 컴포넌트, 파일시스템 연동을 구현한 컴포넌트 등 다양한 컴포넌트가 있다.
Camel 내부에 미리 구현된 컴포넌트가 150 여종이 있으며 사용자가 새로 만들어 끼워 넣을 수 있다.
ex: <from> <to> <file> <uri:MQ> <ftp> <sftp> 등

EndPoint
Camel 컴포넌트의 주소를 나타내며 URI 형태로 기술한다.
라우팅을 기술하기 위해서 컴포넌트의 Endpoint를 기술한다.

Producer
Endpoint에 메시지를 생성, 전달할 수 있는 개체다.

Consumer
Producer에 의해 생성된 메시지를 수신하는 개체, 수신 후 Exchange를 생성하여 라우터에 던져준다

익스체인지(Exchange)
메시지의 컨테이너
메시지가 라우팅 프로세스 중에 consumer에 의해 수신될 때 만들어짐
익스체인지에 메시지를 담아 자바 프로세스 수행, 커스텀 메소드 수행 
속성과 다양한 플래그(flag), 메시지 교환 패턴(MEP: Message Exchange Pattern)(InOnly/InOut) 그리고 두 개의 메시지(In메시지와 Out메시지)를 가지고 있음
속성은 스트링 키와 오브젝트 값의 맵이며, 일반적으로 카멜과 익스체인지의 처리에 관련된 정보를 저장하는 컴포넌트에 의해 사용
하나의 메시지는 처리 단계에서 사용되는 페이로드뿐만 아니라 스트링 키와 오브젝트 값의 맵으로 표현되는 헤더를 가짐
헤더는 프로세서 간 메시지에 관해 부가적인 정보를 전달하기 위해 사용
헤더 값들은 일반적으로 기본값들을 덮어씀
In 메시지는 항상 프로세서로 들어가는 익스체인지를 나타냄
프로세서는 In 메시지를 변경하거나 새로운 페이로드를 준비해 Out 메시지에 위치
만약 하나의 프로세서가 Out 메시지를 정하면, 카멜 컨텍스트는 다음 프로세서로 넘기기 전에 그것을 익스체인지의 In 메시지로 옮길 것임

더 많은 정보는 http://camel.apache.org/exchange.html과 http://camel.apache.org/message.html 참조

프로세서 (Processor)
프로세서는 Camel 내부에서 메시지를 생성, 변환, 수정, 검증 등의 작업을 하여 다른 컴포넌트로라우팅하는 모듈이다.
Camel은 EIP 패턴에 의한 메시지 프로세싱을 지원한다.
스플리터(Splitter)같은 미리 정해진 EIP들을 포함하는 프로세서는 엔드포인트, org.apache.camel.Processor 인터페이스를 구현해 작성한 커스텀 프로세서를 호출

DSL(Domain Specific Language)
컴포넌트와 프로세서를 통하여 라우트 구성을 정의하기 위해서 사용하는 언어다.
Camel은 Java, Spring XML, Scala, Groovy 등 다양한 언어 형태를 지원한다.
DSL을 통하여 다양한 동적 라우팅 및 메시지 변환 등 프로그래밍 요소를 삽입하여 사용 가능하다.

 

 

 

'IT기술 > spring' 카테고리의 다른 글

[Rest] Swagger 란 Rest API 도구  (0) 2023.04.03
Intellij Community 버전으로 spring 개발하기  (0) 2023.03.24
IntelliJ auto Import  (0) 2022.09.22
IntelliJ Import와 Export  (1) 2022.09.22
IntelliJ 인코딩 설정방법  (0) 2022.09.22