8장. 대용량 메시지 처리

클라이언트는 브로커의 내부 버퍼 크기를 초과할 수 있는 대용량 메시지를 보내 예기치 않은 오류가 발생할 수 있습니다. 이러한 상황을 방지하기 위해 메시지가 지정된 최소 값보다 클 때 메시지를 파일로 저장하도록 브로커를 구성할 수 있습니다. 이러한 방식으로 대용량 메시지를 처리한다는 것은 브로커가 메모리에 메시지를 저장하지 않는다는 것을 의미합니다. 대신 브로커가 큰 메시지 파일을 저장하는 디스크 또는 데이터베이스 테이블에 디렉터리를 지정합니다.

브로커가 메시지를 큰 메시지로 저장할 때 큐는 큰 메시지 디렉터리 또는 데이터베이스 테이블의 파일에 대한 참조를 유지합니다.

대규모 메시지 처리는 코어 프로토콜, AMQP, OpenWire 및 STOMP 프로토콜에 사용할 수 있습니다.

코어 프로토콜 및 OpenWire 프로토콜의 경우 클라이언트는 연결 구성에서 최소 큰 메시지 크기를 지정합니다. AMQP 및 STOMP 프로토콜의 경우 브로커 구성의 각 프로토콜에 대해 정의된 허용자에서 최소 대규모 메시지 크기를 지정합니다.

참고

큰 메시지를 생성하고 사용하는 데 다른 프로토콜을 사용하지 않는 것이 좋습니다. 이를 위해 브로커는 메시지의 여러 변환을 수행해야 할 수 있습니다. 예를 들어 AMQP 프로토콜을 사용하여 메시지를 보내고 OpenWire를 사용하여 수신하려고 합니다. 이 상황에서 브로커는 먼저 큰 메시지의 전체 본문을 읽고 핵심 프로토콜을 사용하도록 변환해야합니다. 그런 다음 브로커는 이번에는 OpenWire 프로토콜로 다른 변환을 수행해야합니다. 이러한 메시지 변환은 브로커에 상당한 처리 오버헤드를 초래합니다.

위의 프로토콜 중 하나에 지정하는 최소 큰 메시지 크기는 사용 가능한 디스크 공간 크기와 메시지 크기와 같은 시스템 리소스의 영향을 받습니다. 여러 값을 사용하여 성능 테스트를 실행하여 적절한 크기를 결정하는 것이 좋습니다.

이 섹션의 절차에는 다음이 표시됩니다.

  • 대규모 메시지를 저장하도록 브로커 구성
  • 대규모 메시지 처리를 위한 AMQP 및 STOMP 프로토콜에 대한 수용자를 구성

이 섹션은 AMQ Core Protocol 및 AMQ OpenWire JMS 클라이언트 구성에 대한 추가 리소스에 대한 링크로 연결됩니다.

8.1. 대규모 메시지 처리를 위한 브로커 구성

다음 절차에서는 브로커가 큰 메시지 파일을 저장하는 디스크 또는 데이터베이스 테이블에서 디렉터리를 지정하는 방법을 보여줍니다.

절차

  1. < broker-instance-dir> /etc/broker.xml 구성 파일을 엽니다.
  2. 브로커가 큰 메시지 파일을 저장할 위치를 지정합니다.

    1. 대용량 메시지를 디스크에 저장하는 경우 core 요소 내에 large-messages-directory 매개 변수를 추가하고 파일 시스템 위치를 지정합니다. 예를 들면 다음과 같습니다.

      <configuration>
        <core>
          ...
          <large-messages-directory>/path/to/my-large-messages-directory</large-messages-directory>
          ...
        </core>
      </configuration>
      참고

      large-messages-directory 의 값을 명시적으로 지정하지 않으면 브로커는 기본값 < broker-instance-dir> /data/largemessages를 사용합니다.

    2. 데이터베이스 테이블에 대용량 메시지를 저장하는 경우 database-store 요소에 large-message-table 매개 변수를 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.

      <store>
        <database-store>
          ...
          <large-message-table>MY_TABLE</large-message-table>
          ...
        </database-store>
      </store>
      참고

      large-message-table 의 값을 명시적으로 지정하지 않으면 브로커는 기본값 LARGE_MESSAGE_TABLE 을 사용합니다.

추가 리소스