브로커에 클라이언트가 연결되면 메시지 경로 지정 및 전달이 수행될 수 있습니다. 이 단계에서 브로커는 여러 종류의 물리적 대상을 작성 및 관리하여 메시지의 원활한 흐름을 보장하고 자원을 효율적으로 관리합니다. 라우팅 등록 정보에 설명된 브로커 구성 등록 정보를 사용하여 응용 프로그램 요구에 맞는 방식으로 이러한 작업을 관리할 수 있습니다.
브로커의 성능과 안정성은 사용 가능한 시스템 자원(메모리 등)과 이러한 자원이 얼마나 효율적으로 활용되는가에 따라 달라집니다. 브로커에서 받는 메시지가 너무 많거나 메모리 부족이 발생하지 않도록 구성 정보를 설정할 수 있습니다. 이러한 등록 정보는 세 가지 서로 다른 수준에서 작동하여 자원이 부족해질 때에도 메시지 서비스의 작동 상태를 유지합니다.
시스템 수준 메시지 제한은 시스템의 모든 물리적 대상에 적용됩니다. 여기에는 브로커에서 보유하는 최대 메시지 수(imq.system.max_count)와 해당 메시지가 차지하는 최대 총 바이트 수(imq.system.max_size)가 포함됩니다. 이 제한 중 하나에 도달하면 보류 중인 메시지가 제한 이하로 떨어질 때까지 브로커에서 새 메시지를 거부합니다. 또한 개별 메시지의 최대 크기(imq.message.max_size)와 만료된 메시지가 확보되는 시간 간격(imq.message.expiration.interval)에 대한 제한도 있습니다.
개별 대상 제한은 특정 물리적 대상으로의 메시지 흐름을 규제합니다. 이러한 제한을 제어하는 구성 등록 정보는 15 장, 물리적 대상 등록 정보 참조에서 설명합니다. 이 등록 정보에는 대상에서 보유하는 메시지 수와 크기, 대상에 대해 만들 수 있는 메시지 생성자와 사용자의 수, 그리고 대상에 전달하기 위해 함께 일괄 처리할 수 있는 메시지 수에 대한 제한이 포함됩니다.
메시지 생성자를 통한 메시지 전달 속도를 낮추거나 새로운 받는 메시지를 거부하거나 가장 오래되었거나 우선 순위가 가장 낮은 기존 메시지를 삭제하여 메모리 제한에 응답하도록 대상을 구성할 수 있습니다. 이러한 방법으로 대상에서 삭제되는 메시지를 곧바로 삭제하지 않고 사용 불능 메시지 대기열로 옮길 수 있습니다. 브로커 등록 정보 imq.destination.DMQ.truncateBody는 사용 불능 메시지 대기열에 전체 메시지 본문을 저장할지 또는 헤더와 등록 정보 데이터만 저장할지 여부를 제어합니다.
응용 프로그램 개발과 테스트의 편의를 위해, 메시지 생성자 또는 사용자가 존재하지 않는 대상에 액세스를 시도할 때마다 새로운 물리적 대상을 자동으로 생성하도록 메시지 브로커를 구성할 수 있습니다. 표 14–3에 요약된 브로커 등록 정보는 방금 설명한 내용과 비슷하지만 관리상 생성된 대상이 아닌 자동 생성 대상에 적용됩니다.
시스템 메모리 임계값은 브로커가 메모리 과부하를 방지하기 위해 조치 수위를 점차적으로 높이는 메모리 사용 수준을 정의합니다. 이러한 사용 수준은 네 가지로 정의됩니다.
초록:사용 가능한 메모리 충분
노랑:브로커 메모리 부족 시작
주황:브로커 메모리 부족
빨강:브로커 메모리 없음
이러한 수준을 정의하는 메모리 사용률은 브로커 등록 정보 imq.green.threshold, imq.yellow.threshold, imq.orange.threshold 및 imq.red.threshold를 통해 지정되며, 각각의 기본값은 초록인 경우 0%, 노랑인 경우 80%, 주황인 경우 90%, 빨강인 경우 98%입니다.
메모리 사용량이 한 수준에서 다음 수준으로 올라감에 따라, 브로커는 먼저 활성 메모리의 메시지를 영구 저장소로 옮기고 나서 비지속성 메시지의 생성자를 억제한 후 브로커의 메시지 흐름을 중지시킴으로써 단계적으로 응답합니다. 이러한 두 조치 모두 브로커 성능을 떨어뜨립니다. 메시지 생성 억제는 전달되는 각 일괄 처리의 크기를 등록 정보 imq.resourceState .count에 지정된 메시지 수로 제한함으로써 이루어집니다. 여기서 resourceState는 각각 green , yellow, orange 또는 red입니다.
이러한 시스템 메모리 임계값이 트리거되면 시스템 수준과 대상 메시지 제한이 너무 높게 설정되어 있다는 뜻입니다. 메모리 임계값이 항상 잠재적 메모리 과부하를 제때에 잡을 수 있는 것은 아니므로, 메모리 임계값만으로 메모리 사용을 제어하기보다는 메모리 자원을 최적화하도록 시스템 수준과 대상 제한을 다시 구성해야 합니다.