참조에 의해 메시지 페이로드 전달: 전달 애플리케이션에 대한 사용법 시나리오 및 예제 코드

JMS 전달자 애플리케이션은 메시지를 수신한 후(연결 팩토리를 통해, 또는 메시지가 활성화 스펙을 통한 메시지 구동 Bean인 경우), 메시지 오브젝트를 다른 대상으로 전송합니다. 여러 사용법 시나리오를 탐색한 후, 단일 서버에서 하나의 큐에서 다른 큐로 메시지를 전달할 때 참조에 의해 메시지 페이로드를 안전하게 전달할 수 있도록 JMS 전달 애플리케이션을 코드화하십시오.

대용량 오브젝트 메시지 또는 바이트 메시지가 전송되면, 메시지 페이로드를 직렬화, 직렬화 해제 및 복사하는 데 사용하는 메모리 및 프로세서의 비용이 커질 수 있습니다. 연결 팩토리 또는 활성화 스펙에서 참조에 의한 메시지 페이로드 전달 특성을 사용하면, 기본 메시징 제공자가 JMS 1.1 스펙을 대체하고 이 데이터의 복사를 줄이거나 생략하도록 합니다.

다음 그림에서, 메시지가 이용자 활성화 스펙 또는 연결 팩토리를 통해 메시징 엔진의 queue1에서 JMS 전달 애플리케이션으로 전달됩니다. 그런 다음, 메시지가 생성자 연결 팩토리를 통해 동일한 메시징 엔진에 있는 queue2로 전달됩니다.

경고:
이러한 특성에 의해 생략된 JMS 스펙의 파트는 메시징 데이터의 무결성을 보장하도록 정의됩니다. 이러한 특성을 사용하는 모든 JMS 애플리케이션은 설명된 규칙을 엄격히 따라야 합니다. 그렇지 않으면 데이터 무결성을 잃게 됩니다.
그림 1. 메시지 전달
이 그림은 한 큐에서 다른 큐로의 메시지 플로우를
보여줍니다. queue1에서 메시지가 이용자 활성화 스펙 또는 연결 팩토리 특성을 통해 JMS 전달 애플리케이션으로
전달됩니다.
JMS 전달 애플리케이션에서 메시지는
생성자 연결 팩토리 특성을 통해 queue2에 전달됩니다.
이 주제에 주어진 연관된 예제 코드 및 사용법 시나리오를 파악하려면 JMS 전달 애플리케이션의 이러한 중요한 특성을 참고해야 합니다.
  • 전달 애플리케이션은 메시지 오브젝트를 바꾸지 않습니다. 이는 애플리케이션이 로깅하거나, 메시지를 전달하기 전에 기록(예: 인쇄)할 때 유용하며, 또한 전달된 메시지가 JMSCorrelationID, JMSReplyToJMSType 특성과 같은 일부 유용한 메시지 특성을 유지함을 의미합니다.
  • 전달 애플리케이션은 메시지 페이로드를 수정하거나 바꿀 수 있습니다. 페이로드를 바꾸는 경우, 메시지 오브젝트에 있는 새 페이로드를 설정하고 새 메시지 페이로드를 나타내도록 페이로드 참조를 변경합니다.
  • 전달 애플리케이션의 경우, 전달된 메시지가 이용자 연결 팩토리 또는 활성화 스펙에 의해 "작성"되고 구성됩니다. 생성자 연결 팩토리는 전달된 메시지를 라우트하는 데만 사용되며 전달된 메시지의 내용에 영향을 주지 않습니다.

다음 표는 "참조에 의한 메시지 페이로드 전달" 특성을 설정하는 방법에 영향을 주는 네 가지 전달 애플리케이션 사용법 시나리오에 대해 설명합니다. 생성자 연결 팩토리가 전달된 메시지의 내용에 영향을 주지 않기 때문에, 이용자 연결 팩토리 또는 활성화 스펙에 이용자 특성 및 생성자/전달자 특성을 설정합니다.

표 1. 전달 애플리케이션 사용 시나리오에서 "참조에 의한 메시지 페이로드 전달" 특성 설정의 영향. 표의 첫 번째 열은 4개의 전달 애플리케이션 사용 시나리오를 나열합니다. 두 번째 열은 시나리오에 대한 이용자 특성 설정을 나타냅니다. 세 번째 열은 시나리오에 대한 연결 또는 활성화 스펙 특성 설정을 나타냅니다.
전달 애플리케이션 사용법 시나리오

consumerDoesNotModify
PayloadAfterGet

특성 설정

producerDoesNotModify
PayloadAfterSet

(연결 팩토리용 또는

forwarderDoesNotModify
PayloadAfterSet

(활성화 스펙용) 특성 설정
시나리오 1: 애플리케이션이 메시지를 수신하고 페이로드를 살펴보지만 수정은 하지 않으며, 페이로드를 수정하거나 바꾸지 않고 메시지를 전달합니다. 사용 가능 필요하지 않지만 사용 가능하게 할 수 있음
시나리오 2: 애플리케이션이 메시지를 수신하고 페이로드를 살펴보지만 수정은 하지 않으며, 메시지의 페이로드를 새 페이로드로 바꾸고, 페이로드를 메시지에 설정하도록 호출한 후 페이로드를 수정하지 않고 메시지를 전달합니다. 사용 가능 사용 가능
시나리오 3: 애플리케이션이 메시지를 수신하고, 페이로드를 살펴보고 수정한 후, 수정된 페이로드 또는 기타 데이터를 메시지로 다시 설정하며, 페이로드를 메시지에 설정하도록 호출한 후 페이로드를 추가 수정하지 않고 메시지를 전달합니다. 사용 가능하지 않음 사용 가능
시나리오 4: 애플리케이션이 메시지를 수신하고, 페이로드를 살펴보고 수정한 후, 수정된 페이로드 또는 기타 데이터를 메시지로 다시 설정하며, 페이로드를 메시지에 설정하도록 호출한 후 페이로드를 추가 수정합니다. 사용 가능하지 않음 사용 가능하지 않음

시나리오 1, 2 및 3에서 전달 애플리케이션이 시나리오에 설명된 대로 작동하도록 보장할 수 있는 경우, 하나 이상의 "참조에 의한 메시지 페이로드 전달" 특성을 사용할 수 있습니다. 이를 수행하도록 지원하기 위해, 여기에 애플리케이션에서 사용하도록 적용할 수 있는 예제 코드가 있습니다.

전달 애플리케이션: 시나리오 1

애플리케이션이 메시지를 수신하고, 페이로드를 살펴보지만 이를 수정하지 않으며, 페이로드를 수정 또는 바꾸지 않고 메시지를 전달합니다.

public void onMessage (Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());

   // get a session to forward on the received message
   
   producer.send(message);
   session.close();
}

전달 애플리케이션: 시나리오 2

애플리케이션이 메시지를 수신하고 페이로드를 살펴보지만 수정은 하지 않으며, 메시지의 페이로드를 새 페이로드로 바꾸고, 페이로드를 메시지에 설정하도록 호출한 후 페이로드를 수정하지 않고 메시지를 전달합니다.

public void onMessage (Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());

   // get a session to forward on the received message
   
   message.setObject(newData);

   producer.send(message);
   session.close();
}
바이트 메시지의 경우, 또한 애플리케이션에서 단일의 전체 바이트 배열만 메시지로 작성하도록 보장해야 합니다.
byte [] data = myByteData; 
BytesMessage message = session.createBytesMessage(); 
message.writeBytes(data); 
data = null;	 
producer.send(message);

전달 애플리케이션: 시나리오 3

애플리케이션이 메시지를 수신하고, 페이로드를 살펴보고 수정한 후, 수정된 페이로드 또는 기타 데이터를 메시지로 다시 설정하며, 페이로드를 메시지에 설정하도록 호출한 후 페이로드를 추가 수정하지 않고 메시지를 전달합니다.

public void onMessage (Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());

   // get a session to forward on the received message

   data.setXXX(xxx);
   data.setYYY(yyy);
   message.setObject(data);

   producer.send(message);
   session.close();
}
바이트 메시지의 경우, 또한 애플리케이션에서 단일의 전체 바이트 배열만 메시지로 작성하도록 보장해야 합니다.
byte [] data = myByteData; 
BytesMessage message = session.createBytesMessage(); 
message.writeBytes(data); 
data = null;	 
producer.send(message);

주제 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjn_passbyref_forward
파일 이름:cjn_passbyref_forward.html