Sun Java System Message Queue 3.7 UR1 기술 개요

프로그래밍 객체

연결 팩토리, 연결, 세션, 제작자, 소비자, 메시지, 대상과 같이 JMS 메시징을 구현하는 데 사용되는 객체는 프로그래밍 도메인 전체에서 동일하게 유지되어야 합니다. 이 객체는 그림 2–5에 나와 있습니다. 이 그림에서는 연결 팩토리 객체부터 시작하여 객체가 파생되는 방법을 위에서 아래로 보여 줍니다.

객체 저장소에는 두 개의 객체(연결 팩토리와 대상)가 있습니다. 이는 이 객체들이 일반적으로 관리 대상 객체로 생성, 구성되고 관리됨을 나타냅니다. 이 장에서는 연결 팩토리와 대상이 프로그래밍 방식이 아니라 관리 목적으로 생성된다고 가정합니다.

그림 2–5 JMS 프로그래밍 객체

연결 팩토리, 연결, 세션, 제작자, 소비자, 메시지 및 대상 간의 관계를 나타내는 그림입니다. 그림은 텍스트에 설명되어 있습니다.

표 2–2에서는 메시지를 보내고 받는 데 필요한 단계를 요약합니다. 1-6단계는 발신자와 수신자 모두에게 동일합니다.

표 2–2 메시지 생성 및 소비

메시지 생성 

메시지 소비 

1. 관리자가 연결 팩토리 관리 대상 객체를 만듭니다.

2. 관리자가 물리적 대상과 해당 대상을 참조하는 관리 대상 객체를 만듭니다.

3. 클라이언트가 JNDI 조회를 통해 연결 팩토리 객체를 가져옵니다.

4. 클라이언트가 JNDI 조회를 통해 대상 객체를 가져옵니다.

5. 클라이언트가 연결을 만들고 이 연결에 관한 등록 정보를 설정합니다.

6. 클라이언트가 세션을 만들고 메시징 안정성을 제어하는 등록 정보를 설정합니다.

7. 클라이언트가 메시지 제작자를 만듭니다. 

클라이언트가 메시지 소비자를 만듭니다. 

8. 클라이언트가 메시지를 작성합니다. 

클라이언트가 연결을 시작합니다. 

9. 클라이언트가 메시지를 보냅니다. 

클라이언트가 메시지를 받습니다. 

다음 절에서는 연결, 세션, 메시지, 대상과 같이 제작자와 소비자가 소비하는 객체에 대해 설명합니다. 그런 다음 메시지의 생성과 소비를 설명하여 JMS 객체에 대한 내용을 마치겠습니다.

연결 팩토리 및 연결

클라이언트는 연결 팩토리 객체(ConnectionFactory)를 사용하여 연결을 만듭니다. 연결 객체(Connection)는 클라이언트와 브로커 간의 활성 연결을 나타냅니다. 이 연결 객체는 기본적으로 시작되거나 이 클라이언트의 관리자가 명시적으로 시작하는 기본 연결 서비스를 사용합니다.

연결이 만들어지면 통신 자원 할당 및 클라이언트 인증이 이루어집니다. 이는 비교적 중량급 객체이며, 대부분의 클라이언트는 단일 연결을 사용하여 모든 메시징을 수행합니다. 연결은 동시 사용을 지원합니다. 제작자와 소비자는 그 수의 제한 없이 동일한 연결을 공유할 수 있습니다.

연결 팩토리를 만들 때 해당 등록 정보를 설정하여 연결 팩토리에서 파생되는 모든 연결의 동작을 구성할 수 있습니다. Message Queue의 경우 등록 정보를 통해 다음과 같은 정보를 지정합니다.

클라이언트 응용 프로그램을 시작할 때 사용하는 명령줄에서 연결 팩토리 등록 정보를 대체할 수 있습니다. 해당 연결에 대한 등록 정보를 설정하여 주어진 연결에 대한 등록 정보를 대체할 수도 있습니다.

연결 객체를 사용하여 세션 객체를 만들거나, 예외 수신자를 설정하거나, JMS 버전 및 공급자 정보를 가져올 수 있습니다.

세션

연결이 클라이언트와 브로커 간의 통신 채널을 나타내는 경우 세션에 클라이언트와 브로커 간의 단일 대화가 표시됩니다.일반적으로 세션 객체를 사용하여 메시지, 메시지 제작자 및 메시지 소비자를 만듭니다. 세션을 만들 경우 많은 확인 옵션 또는 트랜잭션을 통해 안정적인 전달을 구성합니다. 자세한 내용은 안정적인 메시징을 참조하십시오.

JMS 사양에 따르면 세션은 메시지 생성 및 소비를 위한 단일 스레드 컨텍스트입니다. 단일 세션에 대해 여러 메시지 제작자와 소비자를 만들 수 있지만, 해당 제작자와 소비자를 순차적으로 사용해야 합니다. 스레딩 구현은 Java 클라이언트와 C 클라이언트 간에 약간 다릅니다. 스레딩 구현 및 제한에 대한 자세한 내용은 해당 개발 안내서를 참조하십시오.

세션 객체를 사용하여 다음을 수행할 수도 있습니다.

메시지

메시지는헤더, 등록 정보 및 본문으로 구성됩니다.이 구조를 이해해야 메시지를 적절하게 작성하고 특정 메시징 동작을 구성할 수 있습니다.

메시지 헤더

헤더는 모든 JMS 메시지에서 필수입니다. 헤더에는 10개의 사전 정의된 필드가 포함되어 있습니다. 이러한 필드에 대한 목록과 설명은 표 2–3을 참조하십시오.

표 2–3 JMS 정의 메시지 헤더

헤더 필드 

설명 

JMSDestination

메시지를 보낼 대상 객체의 이름을 지정합니다. (공급자가 설정)

JMSDeliveryMode

메시지가 지속성 메시지인지 여부를 지정합니다. (기본적으로 공급자가 설정하거나, 클라이언트가 제작자 또는 개별 메시지에 대해 명시적으로 설정)

JMSExpiration

메시지가 만료되는 시간을 지정합니다. (기본적으로 공급자가 설정하거나, 클라이언트가 제작자 또는 개별 메시지에 대해 설정)

JMSPriority

0(낮음)-9(높음) 범위에서 메시지의 우선 순위를 지정합니다. (기본적으로 공급자가 설정하거나, 클라이언트가 제작자 또는 개별 메시지에 대해 명시적으로 설정)

JMSMessageID

공급자 설치 컨텍스트 내에서 메시지에 대한 고유 아이디를 지정합니다. (공급자가 설정)

JMSTimestamp

공급자가 메시지를 받은 시간을 지정합니다. (공급자가 설정)

JMSCorrelationID

클라이언트가 두 메시지 간의 통신을 정의하는 데 사용하는 값(클라이언트가 필요에 따라 설정)

JMSReplyTo

소비자가 회신을 보낼 대상을 지정합니다. (클라이언트가 필요에 따라 설정)

JMSType

메시지 선택기에서 평가할 수 있는 값(클라이언트가 필요에 따라 설정)

JMSRedelivered

메시지가 이미 전달되었지만 확인되지 않았는지 여부를 나타냅니다. (공급자가 설정)

이 표에서 알 수 있듯이 메시지 헤더 필드는메시지 식별, 메시지 라우팅 구성, 메시지 처리 정보 제공과 같은 다양한 목적으로 사용됩니다.

가장 중요한 필드 중 하나인 JMSDeliveryMode가 메시지 전달의 안정성을 결정합니다. 이 필드는 메시지가 지속성 메시지인지 여부를 나타냅니다.

일부 메시지 헤더 필드는 공급자(브로커 또는 클라이언트 런타임) 또는 클라이언트에 의해 설정됩니다. 메시지 제작자는 특정 메시징 동작을 가져올 헤더 값을 구성해야 합니다. 메시지 소비자는 헤더 값을 읽고 메시지 경로가 지정된 방법과 향후의 메시지 처리에 필요한 내용을 이해해야 합니다.

헤더 필드(JMSDeliveryMode, JMSExpirationJMSPriority)는 세 가지 수준에서 설정할 수 있습니다.

이러한 필드가 여러 수준으로 설정되는 경우, 연결 팩토리에 설정된 값이 개별 메시지에 설정된 값을 대체하며 주어진 메시지에 설정된 값이 메시지 제작자에 설정된 값을 대체합니다.

메시지 헤더 필드의 이름은 언어 구현에 따라 다릅니다. 자세한 내용은 Sun Java System Message Queue 3.7 UR1 Developer’s Guide for Java Clients 또는 Sun Java System Message Queue 3.7 UR1 Developer’s Guide for C Clients를 참조하십시오.

메시지 등록 정보

메시지는 등록 정보 이름과 등록 정보 값 쌍으로 지정되는 등록 정보라는 선택적 헤더 필드를 포함할 수도 있습니다. 클라이언트와 공급자는 이 등록 정보를 통해 메시지 헤더를 확장할 수 있으며, 등록 정보에는 클라이언트나 공급자가 메시지를 식별하여 처리하는 데 유용한 정보가 들어 있을 수 있습니다. 수신 클라이언트는 메시지 등록 정보를 사용하여 지정된 기준에 맞는 메시지만 전달하도록 요청할 수 있습니다. 예를 들어 소비자 클라이언트는 뉴저지에 있는 시간제 직원에 대한 급여 메시지에 대해서만 관심 분야를 표시할 수 있습니다. 공급자는 지정된 기준에 맞지 않는 메시지를 전달하지 않습니다.

JMS 사양에서는 아홉 가지 표준 등록 정보를 정의합니다. 이러한 등록 정보 중 일부는 클라이언트가, 다른 일부는 공급자가 설정합니다. 등록 정보의 이름은 예약된 문자 "JMSX"로 시작됩니다.클라이언트나 공급자는 이러한 등록 정보를 사용하여 메시지를 보낸 사람, 메시지 상태, 메시지 전달 빈도, 메시지가 전달된 시간 등을 확인할 수 있습니다. 이러한 등록 정보를 통해 공급자는 메시지 경로를 지정하고 진단 정보를 제공할 수 있습니다.

Message Queue에서는 메시지 등록 정보도 정의합니다. 메시지 등록 정보는 메시지를 전달할 수 없을 경우의 메시지 처리 방법과 압축된 메시지를 식별하는 데 사용됩니다. 자세한 내용은 Sun Java System Message Queue 3.7 UR1 Developer’s Guide for Java ClientsManaging Message Size를 참조하십시오.

메시지 본문

메시지 본문에는 클라이언트가 교환하고자 하는 데이터가 포함되어 있습니다.

표 2–4에 나와 있는 것처럼 JMS 메시지의 유형에 따라 본문에 포함되는 내용과 소비자가 본문을 처리하는 방법이 결정됩니다. 세션 객체에는 각 메시지 본문 유형에 대한 생성 메소드가 포함되어 있습니다.

표 2–4 메시지 본문 유형

유형 

설명 

StreamMessage

본문이 Java 프리미티브 값의 스트림을 포함하는 메시지. 이 메시지는 순차적으로 채워지고 읽혀집니다. 

MapMessage

본문에 일련의 이름-값 쌍을 포함하는 메시지. 항목 순서는 정의되지 않습니다. 

TextMessage

본문에 Java 문자열을 포함하는 메시지(예: XML 메시지) 

ObjectMessage

본문에 일련화된 Java 객체를 포함하는 메시지 

BytesMessage

본문에 해석되지 않은 바이트의 스트림이 포함된 메시지 

Message

헤더와 등록 정보는 있지만 본문이 없는 메시지 

Java 클라이언트는 클라이언트 런타임에서 전송 중인 메시지의 본문을 압축하도록 등록 정보를 설정할 수 있습니다. 소비자측의 Message Queue 런타임에서 메시지를 전달하기 전에 압축을 풉니다.