4.18. 링 큐 구성

일반적으로 AMQ 브로커의 대기열은 first-in, first-out(first-out) 의미를 사용합니다. 즉, 브로커가 대기열의 tail에 메시지를 추가하고 헤드에서 메시지를 제거합니다. 링 큐는 지정된 고정된 수의 메시지를 보유하는 특수 유형의 큐입니다. 브로커는 새 메시지가 도착하면 큐의 헤드에서 메시지를 제거하여 고정된 큐 크기를 유지하지만, 큐에 이미 지정된 메시지 수가 있습니다.

예를 들어 크기가 3 이고 메시지 A,B,CD 를 순차적으로 전송하는 생산자로 구성된 링 큐를 고려하십시오. 메시지 C 가 큐에 도착하면 대기열의 메시지 수가 구성된 링 크기에 도달했습니다. 이 시점에서 메시지 A 는 대기열의 헤드에 있지만 메시지 C 는 tail에 있습니다. D 메시지가 큐에 도착하면 브로커는 메시지를 대기열의 tail에 추가합니다. 고정 대기열 크기를 유지하기 위해 브로커는 큐의 헤드(즉, 메시지 A)에서 메시지를 제거합니다. 메시지 B 는 이제 큐의 헤드에 있습니다.

4.18.1. 링 큐 구성

다음 절차에서는 링 대기열을 구성하는 방법을 보여줍니다.

절차

  1. < broker-instance-dir> /etc/broker.xml 구성 파일을 엽니다.
  2. 명시적 링 크기가 설정되지 않은 일치하는 주소에 있는 모든 큐의 기본 링 크기를 정의하려면 address-setting 요소에 default-ring-size 값을 지정합니다. 예를 들면 다음과 같습니다.

    <address-settings>
       <address-setting match="ring.#">
          <default-ring-size>3</default-ring-size>
       </address-setting>
    </address-settings>

    default-ring-size 매개변수는 자동 생성된 큐의 기본 크기를 정의하는 데 특히 유용합니다. default-ring-size 의 기본값은 -1 입니다(즉, 크기 제한은 없음).

  3. 특정 큐에서 링 크기를 정의하려면 ring-size 키를 queue 요소에 추가합니다. 값을 지정합니다. 예를 들면 다음과 같습니다.

    <addresses>
       <address name="myRing">
          <anycast>
             <queue name="myRing" ring-size="5" />
          </anycast>
       </address>
    </addresses>
참고

브로커가 실행되는 동안 ring-size 값을 업데이트할 수 있습니다. 브로커는 동적으로 업데이트를 적용합니다. 새 ring-size 값이 이전 값보다 작으면 브로커는 새 크기를 강제 적용하기 위해 큐의 헤드에서 즉시 메시지를 삭제하지 않습니다. 큐에 전송된 새 메시지는 여전히 이전 메시지의 삭제를 강제하지만 대기열은 클라이언트의 정상적인 메시지 사용을 통해 자연스럽게 메시지를 사용할 때까지 크기가 줄어들 때까지 새로운 메시지에 도달하지 않습니다.