검색

4.19. 링 대기열 구성

download PDF

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

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

4.19.1. 링 대기열 구성

다음 절차에서는 링 큐를 구성하는 방법을 보여줍니다.

프로세스

  1. &lt ;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 키를 요소에 추가합니다. 값을 지정합니다. 예를 들면 다음과 같습니다.

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

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

4.19.2. 링 대기열 문제 해결

이 섹션에서는 링 대기열의 동작이 구성과 다른 상황에 대해 설명합니다.

In-delivery 메시지 및 롤백

메시지가 소비자에게 전달될 때 메시지는 기술적으로 큐에 존재하지 않지만 아직 승인되지 않은 "내부" 상태에 있습니다. 메시지는 소비자가 승인할 때까지 전달 중 상태로 유지됩니다. 전송 중 상태에 남아 있는 메시지는 링 대기열에서 제거할 수 없습니다.

브로커는 전달 중 메시지를 제거할 수 없으므로 클라이언트는 링 크기 구성이 허용하는 것보다 링 큐로 더 많은 메시지를 보낼 수 있습니다. 예를 들어 다음 시나리오를 고려하십시오.

  1. 생산자는 ring-size="3" 로 구성된 링 큐에 세 개의 메시지를 보냅니다.
  2. 모든 메시지는 즉시 소비자에게 전달됩니다.

    이 시점에서 messageCount= 3제공하고Count= 3 을 제공합니다.

  3. 생산자는 다른 메시지를 큐에 보냅니다. 그런 다음 메시지가 소비자에게 전달됩니다.

    이제 messageCount = 4제공하고Count = 4 를 제공합니다. 메시지 수 4 는 구성된 링 크기 3 보다 큽니다. 그러나 브로커는 큐에서 전송 중 메시지를 제거할 수 없기 때문에 이 상황을 허용할 의무가 있습니다.

  4. 이제 메시지를 승인하지 않고 소비자가 닫혀 있다고 가정합니다.

    이 경우 승인되지 않은 네 개의 메시지가 브로커에 다시 취소되고 사용된 역순으로 큐의 헤드에 추가됩니다. 이 작업을 수행하면 큐가 구성된 링 크기에 도달합니다. 링 대기열은 헤드의 메시지에 따라 대기열의 메시지를 선호하기 때문에 대기열은 대기열의 헤드에 다시 추가된 마지막 메시지였기 때문에 생산자가 보낸 첫 번째 메시지를 삭제합니다. 트랜잭션 또는 코어 세션 롤백은 동일한 방식으로 처리됩니다.

코어 클라이언트를 직접 사용하거나 AMQ Core Protocol JMS 클라이언트를 사용하는 경우 consumerWindowSize 매개변수 값(1024 * 1024바이트)의 값을 줄임으로써 전달 시 메시지 수를 최소화할 수 있습니다.

예약된 메시지

예약된 메시지가 큐로 전송되면 메시지는 일반 메시지와 같이 큐에 즉시 추가되지 않습니다. 대신 브로커는 중간 버퍼에 예약된 메시지를 보유하고 메시지의 세부 정보에 따라 큐 헤드에 전달할 메시지를 예약합니다. 그러나 예약된 메시지는 큐의 메시지 수에 계속 반영됩니다. 전송 중 메시지와 마찬가지로 이 동작으로 인해 브로커가 링 큐 크기를 적용하지 않는 것처럼 보일 수 있습니다. 예를 들어 다음 시나리오를 고려하십시오.

  1. 12:00에 생산자는 ring-size="3" 로 구성된 링 큐로 메시지를 전송합니다. 이 메시지는 12:05로 예정되어 있습니다.

    이 시점에서 messageCount= 1scheduledCount= 1.

  2. 12:01에서 생산자는 메시지 B 를 동일한 링 큐로 보냅니다.

    이제 messageCount= 2scheduledCount= 1 입니다.

  3. 12:02에서 생산자는 메시지 C 를 동일한 링 큐로 보냅니다.

    이제 messageCount= 3scheduledCount= 1.

  4. 12:03에서 생산자는 메시지 D 를 동일한 링 큐로 보냅니다.

    이제 messageCount= 4scheduledCount= 1 입니다.

    큐의 메시지 수는 이제 구성된 링 크기인 3 보다 4 개입니다. 그러나 예약된 메시지는 아직 큐에 기술적으로 표시되지 않습니다(즉, 브로커에 있고 큐에 배치되도록 예약됨). 예약된 전송 시간 12:05에서 브로커는 큐의 헤드에 메시지를 넣습니다. 그러나 링 큐가 이미 구성된 크기에 도달했으므로 예약된 메시지 A 가 즉시 제거됩니다.

페이지가 지정된 메시지

전달된 예약된 메시지 및 메시지와 유사하게 페이지 지정된 메시지는 브로커가 적용하는 링 큐 크기로 계산되지 않습니다. 메시지는 큐 수준이 아닌 주소 수준에서 실제로 페이지링되기 때문입니다. 페이지 지정된 메시지는 큐의 messageCount 값에 반영되지만 큐에 기술적으로 반영되지 않습니다.

링 큐가 있는 주소에 페이징을 사용하지 않는 것이 좋습니다. 대신 전체 주소가 메모리에 적합할 수 있는지 확인합니다. 또는 address-full-policy 매개변수를 DROP,BLOCK 또는 FAIL 값으로 구성합니다.

추가 리소스

  • 브로커는 소급 주소를 구성할 때 링 큐의 내부 인스턴스를 생성합니다. 자세한 내용은 4.20절. “소급 주소 구성” 에서 참조하십시오.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.