Sun Java System Message Queue 3.7 UR1 기술 개요

MOM 표준으로서의 JMS

JMS(Java Messaging Service) 사양은 원래 Java 응용 프로그램이 기존 MOM 시스템에 액세스할 수 있도록 개발되었습니다. JMS 사양은 첫 선을 보인 이후 기존의 많은 MOM 공급업체에 의해 채택되었으며 물론 비동기식 메시징 시스템으로 구현되었습니다.

JMS 사양의 설계자들은 이 사양을 개발할 때 다음과 같이 기존 메시징 시스템의 필수적인 요소를 수용하고자 했습니다.

공급업체는 JMS 인터페이스를 구현하는 라이브러리, 메시지를 라우팅하고 전달하는 기능, 메시징 서비스를 관리, 모니터링하고 조정하는 관리 도구 등으로 구성되는 JMS 공급자를 제공하여 JMS 사양을 구현합니다. 라우팅 및 전달 기능은 중앙 집중식 메시지 서버나 브로커에서 수행되거나, 각 클라이언트 런타임의 일부인 기능을 통해 구현될 수 있습니다.

또한 JMS 공급자는 다음과 같은 다양한 역할을 수행할 수 있습니다. JMS 공급자를 독립 실행형 제품으로 만들거나 대용량 분산 런타임 시스템의 내장 구성 요소로 만들 수 있습니다. 독립 실행형 제품으로 만든 JMS 공급자는 엔터프라이즈 응용 프로그램 통합 시스템의 백본을 정의하는 데 사용될 수 있고, 응용 프로그램 서버에 내장된 JMS 공급자는 구성 요소 간 메시징을 지원할 수 있습니다. 예를 들어 J2EE는 JMS 공급자를 사용하여 Message-Driven Bean을 구현하고 EJB 구성 요소가 메시지를 보내고 받을 수 있도록 합니다.

기존 시스템의 모든 기능을 포함하는 표준을 만들었다면 학습하거나 구현하기 어려운 시스템이 생성되었을 것입니다. 대신, JMS에서는 메시징 개념과 기능의 공통 분모를 정의했습니다. 그 결과 배우기 쉽고 JMS 공급자 간 JMS 응용 프로그램의 이식성을 최대화하는 표준이 생성되었습니다. JMS는 프로토콜 표준이 아니라 API 표준입니다. JMS 클라이언트를 공급업체 간에 쉽게 이동할 수 있습니다. 그러나 일반적으로 서로 다른 JMS 공급업체 간에는 직접 통신할 수 없습니다.

다음 절에서는 JMS 사양에 정의된 기본 객체와 메시징 패턴에 대해 설명합니다.

JMS 메시징 객체 및 패턴

메시지를 보내거나 받으려면 메시지 브로커로도 구현되는 JMS 공급자에 JMS 클라이언트를 맨 먼저 연결해야 합니다. 그러면 클라이언트와 브로커 간에 통신 채널이 열립니다. 그런 다음 클라이언트는 메시지를 작성, 생성 및 소비하는 세션을 설정해야 합니다. 세션을 클라이언트와 브로커 간의 특정 대화를 정의하는 메시지 스트림으로 간주할 수 있습니다. 클라이언트 자체는 메시지 제작자 또는 메시지 소비자입니다. 메시지 제작자는 브로커가 관리하는 대상에게 메시지를 보냅니다. 메시지 소비자는 해당 대상에 액세스하여 메시지를 소비합니다. 메시지는 헤더, 선택적 등록 정보 및 본문으로 구성됩니다. 본문에는 데이터가 저장되고, 헤더에는 브로커가 메시지를 라우팅하고 관리하는 데 필요한 정보가 들어 있으며, 등록 정보는 클라이언트 응용 프로그램이나 공급자가 자체 메시지 처리 요건에 맞게 정의할 수 있습니다. JMS 사양을 구성하는 기본 객체는 연결, 세션, 대상, 메시지, 제작자 및 소비자입니다.

클라이언트 응용 프로그램은 이러한 기본 객체를 사용하여 두 가지 메시징 패턴 또는 도메인을 통해 메시지를 주고 받을 수 있습니다. 그림 1–4를 참조하십시오.

그림 1–4 JMS 메시징 패턴

대기열을 사용하여 메시지를 보내는 클라이언트와 주제를 사용하여 메시지를 보내는 클라이언트를 나타내는 그림입니다. 그림은 텍스트에 설명되어 있습니다.

클라이언트 A와 B는 서로 다른 두 대상을 경유하여 클라이언트 C, D 및 E에게 메시지를 보내는 메시지 제작자입니다.

도메인의 메시지 소비자는 메시지를 동기식으로 받을지 비동기식으로 받을지 여부를 선택할 수 있습니다. 동기식 소비자는 메시지를 검색하기 위해 명시적 호출을 생성하고, 비동기식 소비자는 보류 중인 메시지를 전달하기 위해 호출되는 콜백 메소드를 지정합니다. 또한 소비자는 들어오는 메시지에 대한 선택 기준을 지정하여 메시지를 필터링할 수 있습니다.

관리 대상 객체

JMS 사양에서는 모든 가능성을 고갈시키지 않으면서 기존 MOM 시스템의 많은 요소를 결합하는 표준을 탄생시켰습니다. 즉, 차이점과 추가 확장을 수용할 수 있는 확장 체계를 마련하고자 했습니다. JMS는 개별 공급자가 다양한 메시징 요소를 정의하고 구현할 수 있는 가능성을 남겨 두었습니다. 이러한 요소로는 로드 균형 조정, 표준 오류 메시지, 관리 API, 보안, 기본 와이어 프로토콜, 메시지 저장소 등이 있습니다. 다음 Message Queue: 요소 및 기능 절에서는 Message Queue가 그러한 많은 요소를 구현하고 JMS 사양을 확장하는 방법에 대해 설명합니다.

JMS에서 완전히 정의하지 않은 두 메시징 요소는 연결 팩토리와 대상입니다. 이러한 요소는 JMS 프로그래밍 모델의 기본 요소이지만, 공급자가 이러한 객체를 정의하고 관리하는 방식에 많은 차이가 있으므로 공통 정의를 생성하는 것은 가능하지도 않고 바람직하지도 않습니다. 따라서 이 두 객체는 프로그래밍 방식으로 만들지 않고 관리 도구를 사용하여 만들어 구성하는 것이 일반적입니다. 그러면 두 객체가 객체 저장소에 저장되고 JMS 클라이언트가 표준 JNDI 조회를 통해 액세스할 수 있습니다.

JMS 클라이언트는 관리 대상 객체를 조회할 필요가 없으며, 이러한 객체를 프로그래밍 방식으로 만들어 브로커의 메모리에 저장할 수 있습니다. 프로토타입을 신속하게 제작하려면 이러한 객체를 프로그래밍 방식으로 만드는 것이 가장 쉽습니다. 그러나 프로덕션 환경에서 배포할 경우에는 중앙 저장소에서 관리 대상 객체를 조회하여 메시징 동작을 훨씬 쉽게 제어하고 관리할 수 있습니다.

관리 대상 객체를 사용하면 그림 1–5에 표시된 것처럼 기본 JMS 응용 프로그램에 최종 기능 하나가 추가됩니다.

그림 1–5 JMS 응용 프로그램의 기본 요소

관리 대상 객체를 사용하여 대상을 찾는 제작자와 소비자그림은 텍스트에 설명되어 있습니다.

그림 1–5에서는 메시지 제작자와 메시지 소비자가 대상 관리 대상 객체를 사용하여 해당 물리적 대상에 액세스하는 방법을 보여 줍니다. 표시된 단계는 관리자와 클라이언트 응용 프로그램이 이 메커니즘을 사용하여 메시지를 보내고 받기 위해 수행해야 하는 작업을 나타냅니다.

Procedure관리 대상 객체를 대상으로 사용하는 방법

  1. 관리자는 브로커에 물리적 대상을 만듭니다.

  2. 관리자는 대상 관리 대상 객체를 만든 다음 해당하는 물리적 대상의 이름과 유형(대기열 또는 주제)을 지정하여 객체를 구성합니다.

  3. 메시지 제작자는 JNDI 조회 호출을 사용하여 관리 대상 객체를 조회합니다.

  4. 메시지 제작자는 대상에게 메시지를 보냅니다.

  5. 메시지 소비자는 메시지를 받을 대상 관리 대상 객체를 조회합니다.

  6. 메시지 소비자는 대상으로부터 메시지를 받습니다.

    연결 팩토리 관리 대상 객체를 사용하는 과정도 비슷합니다. 관리자는 관리 도구를 사용하여 연결 팩토리 관리 대상 객체를 만들어 구성합니다. 클라이언트는 연결 팩토리 객체를 조회한 후 이를 사용하여 연결을 만듭니다.

    관리 대상 객체를 사용하면 메시징 처리 과정에 몇 단계가 추가되지만, 메시징 응용 프로그램의 견고성과 이식성이 향상됩니다.