4.19. 링 큐 구성
일반적으로 AMQ 브로커의 대기열은 first-in, first-out(first-out) 의미를 사용합니다. 즉, 브로커가 대기열의 tail에 메시지를 추가하고 헤드에서 메시지를 제거합니다. 링 큐는 지정된 고정된 수의 메시지를 보유하는 특수 유형의 큐입니다. 브로커는 새 메시지가 도착하면 큐의 헤드에서 메시지를 제거하여 고정된 큐 크기를 유지하지만, 큐에 이미 지정된 메시지 수가 있습니다.
예를 들어 크기가 3
이고 메시지 A
,B
,C
및 D
를 순차적으로 전송하는 생산자로 구성된 링 큐를 고려하십시오. 메시지 C
가 큐에 도착하면 대기열의 메시지 수가 구성된 링 크기에 도달했습니다. 이 시점에서 메시지 A
는 대기열의 헤드에 있지만 메시지 C
는 tail에 있습니다. D
메시지가 큐에 도착하면 브로커는 메시지를 대기열의 tail에 추가합니다. 고정 대기열 크기를 유지하기 위해 브로커는 큐의 헤드(즉, 메시지 A
)에서 메시지를 제거합니다. 메시지 B
는 이제 큐의 헤드에 있습니다.
4.19.1. 링 큐 구성
다음 절차에서는 링 대기열을 구성하는 방법을 보여줍니다.
절차
-
<
broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 명시적 링 크기가 설정되지 않은 일치하는 주소에 있는 모든 큐의 기본 링 크기를 정의하려면
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
입니다(즉, 크기 제한은 없음).특정 큐에서 링 크기를 정의하려면
ring-size
키를queue
요소에 추가합니다. 값을 지정합니다. 예를 들면 다음과 같습니다.<addresses> <address name="myRing"> <anycast> <queue name="myRing" ring-size="5" /> </anycast> </address> </addresses>
브로커가 실행되는 동안 ring-size
값을 업데이트할 수 있습니다. 브로커는 동적으로 업데이트를 적용합니다. 새 ring-size
값이 이전 값보다 작으면 브로커는 새 크기를 강제 적용하기 위해 큐의 헤드에서 즉시 메시지를 삭제하지 않습니다. 큐에 전송된 새 메시지는 여전히 이전 메시지의 삭제를 강제하지만 대기열은 클라이언트의 정상적인 메시지 사용을 통해 자연스럽게 메시지를 사용할 때까지 크기가 줄어들 때까지 새로운 메시지에 도달하지 않습니다.