티스토리 뷰

반응형

Apache Camel: 기본 개요 및 개념 정리

카멜의 개요

  • 시스템 통합(System Integrations)을 위한 자바 프레임워크

  • 엔터프라이즈 통합 패턴(Enterprise Integration Patterns)을 기반으로 하는 다양한 오픈 소스 통합 프레임워크

  • 채널을 흐르는 메시지가 고정된 표준 데이터 타입이 아니어도 된다. 카멜이 메시지의 현재 데이터 타입을 추적하고, 확장 가능한 데이터 타입 전환하는 기능을 포함히고 있다. 카멜이 메시지를 프로세스의 다음 단계에서 요구하는 데이터 타입으로 전환한다.

  • HTTP를 사용하여 HTTP, ActiveMQ, JMS, JBI, SCA, MINA 또는 CXF와 같은 모든 유형의 전송 또는 메시징 모델과 플러그 가능 구성 요소 및 데이터 형식 옵션을 직접 처리

  • Java 응용 프로그램에 쉽게 포함될 수 있도록 최소한의 종속성을 가진 작은 라이브러리로, 매우 유연하게 조합되어 고도로 독립적인 Java 코드라도 카멜의 어떤 부분에서든 쉽고 빠르게 확장이 가능

  • 어떤 종류의 Transport가 사용되는지에 관계없이 동일한 API로 작업 할 수 있게 해줌

  • 2013년 기준, 160개가 넘는 컴포넌트가 존재하며, Bean Binding과 CDI, Spring, Blueprint 및 Guice와 같은 널리 사용되는 프레임워크와의 완벽한 통합을 지원

  • Route 테스트에 대한 광범위한 지원을 제공

  • 유효성 검사 및 배포를 위해 여러 Maven 플러그인이 제공

  • 다음 프로젝트는 Apache Camel을 라우팅 및 조정 엔진으로 활용할 수 있습니다.

    • Apache ServiceMix - 인기있는 분산 오픈 소스 ESB 및 JBI 컨테이너

    • Apache ActiveMQ - 성숙하고 널리 사용되는 오픈 소스 메시지 브로커

    • Apache CXF - 스마트 웹 서비스 스위트 (JAX-WS 및 JAX-RS)

    • Apache Karaf - 애플리케이션을 배포 할 수있는 소형 OSGi 기반 런타임

    • Apache MINA - 고성능 NIO 기반 네트워킹 프레임 워크


카멜의 개념

메시지(Message)

  • 경로로 전송되는 데이터가 포함

  • 각 메시지에는 고유한 식별자가 있으며 본문, 머리글 및 첨부 파일로 구성


익스체인지(Exchange)

  • 메시지의 컨테이너

  • 메시지가 라우팅 프로세스 중에 consumer에 의해 수신될 때 만들어짐

  • 시스템간에 서로 다른 유형의 상호 작용을 허용

  • 단방향 메시지 또는 요청 - 응답 메시지를 정의 가능

  • 시스템 간 대화의 상태를 포함하고 있는 홀더 객체

  • 속성과 다양한 플래그(flag), 메시지 교환 패턴(MEP: Message Exchange Pattern)(InOnly/InOut) 그리고 두 개의 메시지(In메시지Out메시지)를 가지고 있음

  • 속성은 스트링 키와 오브젝트 값의 맵이며, 일반적으로 카멜과 익스체인지의 처리에 관련된 정보를 저장하는 컴포넌트에 의해 사용

  • 하나의 메시지는 처리 단계에서 사용되는 페이로드뿐만 아니라 스트링 키와 오브젝트 값의 맵으로 표현되는 헤더를 가짐

  • 헤더는 프로세서 간 메시지에 관해 부가적인 정보를 전달하기 위해 사용

  • 헤더 값들은 일반적으로 기본값들을 덮어씀

  • In 메시지는 항상 프로세서로 들어가는 익스체인지를 나타냄

  • 프로세서는 In 메시지를 변경하거나 새로운 페이로드를 준비해 Out 메시지에 위치

  • 만약 하나의 프로세서가 Out 메시지를 정하면, 카멜 컨텍스트는 다음 프로세서로 넘기기 전에 그것을 익스체인지의 In 메시지로 옮길 것임

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


프로세서(Processor)

  • 모든 메시지 처리 단계를 위한 기본 인터페이스

  • 사용자 정의 통합 로직을 경로에 추가하는 데 사용되는 간단한 Java 인터페이스

  • 스플리터(Splitter)같은 미리 정해진 EIP들을 포함하는 프로세서는 엔드포인트 또는 org.apache.camel.Processor 인터페이스를 구현해 작성한 커스텀 프로세서를 호출

  • consumer가 받은 메시지에서 사용자 지정 비즈니스 논리를 수행하는 데 사용되는 단일 프로세스 방법이 포함

  • 더 많은 정보는 http://camel.apache.org/processor.html 참조


라우트(Route)

  • 카멜 DSL을 사용해 정의한 메시지 처리 단계를 연결한 것

  • 라우트에 정의된 각각의 단계를 통해서 순차적으로 그 익스체인지를 처리함

  • 엔진은 스레딩, 트랜잭션, 에러 처리, 필요할 때 메시지 복제 등을 담당

  • 항상 from()문 안에 하나의 Consumer 엔드포인트로 시작하고 하나 또는 그 이상의 프로세서 단계를 포함함

  • 라우트 내의 프로세싱 단계들은 느슨하게 연결되어 있고(loosely coupled) 서로를 호출하지 않으며, 그들 간에 메시지를 전달하는 대신 카멜 컨텍스트에 의존함

  • 더 많은 정보는 http://camel.apache.org/routes.html 참조


컨텍스트(Context)

  • 라우트에 정의된 단계를 따라 익스체인지를 처리하는 엔진

  • 카멜 프레임워크의 핵심

  • 오래 실행되는(long-running) 객체로 애플리케이션이 살아있는 동안 유지

  • 초기화와 종료는 주로 애플리케이션의 수행주기에 맞물려있음

  • 메시지들은 컴포넌트 기술에 적절한 스레딩 모델에 기반에 라우트에 뿌려짐

  • 그 후의 스레딩은 라우트에 정의된 프로세서들에 의존

  • 카멜 컨텍스트는 주로 다음 위치에서 정의함

    • 독립 커맨드 기반 애플리케이션의 main() 메소드 내에서 정의. 애플리케이션은 사용자가 프로세스를 끝낼 때까지 무한정 기다림

    • 웹 애플리케이션의 javax.servlet.ServletContextListener의 인스턴스 변수에 정의되어 애플리케이션의 시작과 종료를 함께 함

    • OSGi 번들 라이프 사이클에 묶인 객체에서 정의

    • 애플리케이션의 수행주기와 묶은 스프링 또는 OSGi 블루프린트 컨텍스트의 객체 내에서 정의


컴포넌트(Component)

  • 전송 또는 공통 카멜 인터페이스들 뒤에서 전송이나 기술과의 통신을 캡슐화한 라이브러리

  • 동일한 접근법과 구문을 사용하여 서로 다른 기술에 대한 인터페이스를 제공

  • 컴포넌트를 사용해 메시지 Producer 또는 Consumer 처리

  • 이미 가능한 모든 기술에 대해 DSL의 많은 컴포넌트를 지원하지만 맞춤 컴포넌트 작성 기능도 제공

  • 더 많은 정보는 http://camel.apache.org/components.html 참조


엔드포인트(Endpoint)

  • 컴포넌트에 의해 해석되는 주소값

  • 컴포넌트가 메시지를 받거나 보내는 디렉토리, 메시지 큐 또는 데이터베이스 테이블 같은 대상 자원을 식별

  • 웹 서비스 URI, 대기열(queue) URI, 파일, 전자 메일 주소 등을 참조 가능

  • from() 안에 사용되는 하나의 엔드포인트를 Consumer 엔드포인트라 함

  • to() 안에 사용되는 것을 Producer 엔드포인트라 함

  • 엔드포인트는 URI로 표현되며, 그 속성들은 대응되는 특정 컴포넌트에만 적용됨

  • 더 많은 정보는 http://camel.apache.org/endpoint.html 참조


표현식(Expression)

  • 메시지를 처리하는 인라인 코드를 라우트 내에 넣는 하나의 방법

  • 표현식은 많은 EIP들에 사용되어 메시지 라우팅에 영향을 줌

  • 더 많은 정보는 http://camel.apache.org/expression.html 참조


카멜 아키텍처

  • 높은 수준에서 Camel의 아키텍처는 간단합니다. CamelContext는 Camel 런타임 시스템을 나타내며 Route, Component 또는 Endpoint와 같은 다른 개념을 연결합니다.

  • 그리고 그 아래에서 Processor는 Endpoint 간의 라우팅 및 변환을 처리하고 Endpoint는 다른 시스템을 통합합니다.


카멜 DSL(Domain Specific Language)

  • 카멜의 라우트는 각각의 DSL를 통해 정의

  • 어떤 DSL을 사용할 것인지는 주로 개인이 결정

  • 어떤 DSL을 사용하든 카멜의 모든 기능을 사용할 수 있음

  • Java 기반 Fluent API , Spring 또는 Blueprint XML 구성 파일, Scala DSL을 비롯한 다양한 도메인 별 언어로 라우팅 및 조정 규칙을 정의 가능


참고 사이트


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함