11장. 메시징 끝점

초록

메시징 끝점 패턴은 끝점에서 구성할 수 있는 다양한 기능 및 서비스 특성을 설명합니다.

11.1. 메시징 매퍼

11.1.1. 개요

메시징 매퍼 패턴은 도메인 개체를 정식 메시지 형식으로 매핑하는 방법을 설명합니다. 여기서 메시지 형식이 가능한 플랫폼 중립으로 선택됩니다. 선택한 메시지 형식은 6.5절. “메시지 버스” 를 통한 전송에 적합해야 합니다. 여기서 메시지 버스는 다양한 다른 시스템을 통합하기 위한 백본이며, 그 중 일부는 개체 지향적이지 않을 수 있습니다.

다양한 접근 방식을 사용할 수 있지만 모두 메시징 매퍼의 요구 사항을 충족하는 것은 아닙니다. 예를 들어 오브젝트를 전송하는 명확한 방법은 모호하지 않은 인코딩(Java에서 기본적으로 지원)을 사용하여 데이터 스트림에 오브젝트를 작성할 수 있는 개체 직렬화 를 사용하는 것입니다. 그러나 직렬화 형식은 Java 애플리케이션에서만 이해되므로 메시징 매퍼 패턴에 사용하기에 적합한 방법은 아닙니다. Java 개체 직렬화는 원래 애플리케이션과 메시징 시스템의 다른 애플리케이션 간에 임피던스 불일치를 생성합니다.

메시징 매퍼의 요구 사항은 다음과 같이 요약할 수 있습니다.

  • 도메인 개체를 전송하는 데 사용되는 표준 메시지 형식은 개체 지향이 아닌 애플리케이션에서 사용하는 데 적합해야 합니다.
  • 매퍼 코드는 도메인 개체 코드와 메시징 인프라 모두에서 별도로 구현해야 합니다. Apache Camel은 경로에 매퍼 코드를 삽입하는 데 사용할 수 있는 후크를 제공하여 이러한 요구 사항을 충족할 수 있도록 지원합니다.
  • 매퍼는 상속, 개체 참조 및 개체 트리와 같은 특정 개체 지향 개념을 처리하는 효과적인 방법을 찾아야 할 수 있습니다. 이러한 문제의 복잡성은 애플리케이션마다 다르지만 매퍼 구현의 목적은 개체 지향이 아닌 애플리케이션에서 효과적으로 처리할 수 있는 메시지를 생성하는 것입니다.

11.1.2. 매핑할 오브젝트 찾기

다음 메커니즘 중 하나를 사용하여 매핑할 오브젝트를 찾을 수 있습니다.

  • 등록된 8080을 찾습니다. 싱글톤 오브젝트 및 적은 수의 오브젝트의 경우 CamelContext 레지스트리를 사용하여 빈에 대한 참조를 저장할 수 있습니다. 예를 들어, 빈 인스턴스가 Spring XML을 사용하여 인스턴스화되면 레지스트리에 자동으로 입력되며, 이 레지스트리의 id 속성 값으로 빈이 식별됩니다.
  • JoSQL 언어를 사용하여 오브젝트를 선택합니다. 액세스하려는 모든 오브젝트가 런타임에 이미 인스턴스화되어 있는 경우, JoSQL 언어를 사용하여 특정 오브젝트(또는 오브젝트)를 찾을 수 있습니다. 예를 들어 이름 VLAN 속성이 있고 들어오는 메시지에 UserName 헤더가 있는 org.apache.camel.builder.Person 클래스가 있는 경우 다음 코드를 사용하여 UserName 헤더와 이름 속성이 있는 오브젝트를 선택할 수 있습니다.

    import static org.apache.camel.builder.sql.SqlBuilder.sql;
    import org.apache.camel.Expression;
    ...
    Expression expression = sql("SELECT * FROM org.apache.camel.builder.sql.Person where name = :UserName");
    Object value = expression.evaluate(exchange);

    여기서 :HeaderName 라는 구문은 JoSQL 표현식의 헤더 값을 대체하는 데 사용됩니다.

  • 보다 확장 가능한 솔루션의 경우 데이터베이스에서 개체 데이터를 읽을 필요가 있을 수 있습니다.For a more scalable solution, it might be necessary to read object data from a database. 경우에 따라 기존 개체 지향 애플리케이션에서 이미 데이터베이스에서 개체를 로드할 수 있는 finder 개체를 제공할 수 있습니다. 다른 경우에는 데이터베이스에서 오브젝트를 추출하기 위해 일부 사용자 지정 코드를 작성해야 할 수 있으며, 이러한 경우 JDBC 구성 요소와 SQL 구성 요소가 유용할 수 있습니다.