10장. 흐름 제어
흐름 제어는 생산자와 소비자가 그 사이의 데이터 흐름을 제한함으로써 과부하되지 않도록 합니다. AMQ Broker를 사용하면 소비자와 생산자 모두에 대한 흐름 제어를 구성할 수 있습니다.
10.1. 생산자 흐름 제어 링크 복사링크가 클립보드에 복사되었습니다!
소비자 창 기반 흐름 제어와 유사한 방식으로 AMQ Broker는 생산자에서 전송된 데이터 양을 브로커로 제한하여 브로커가 너무 많은 데이터로 과부하되지 않도록 할 수 있습니다. 생산자의 경우 창 크기에 따라 한 번에 진행 중일 수 있는 바이트 수가 결정됩니다.
10.1.1. 메시지 차단 링크 복사링크가 클립보드에 복사되었습니다!
둘 이상의 생산자가 동일한 주소와 연관될 수 있기 때문에 브로커가 실제로 사용 가능한 것보다 모든 생산자에 걸쳐 더 많은 단위를 할당할 수 있습니다. 그러나 브로커가 사용 가능한 것보다 더 많은 단위를 보내는 것을 방해하는 모든 주소에 최대 크기를 설정할 수 있습니다.
기본 구성에서 최대 최대 크기는 각 주소에 대해 100Mb로 사용됩니다. 주소가 가득 차면 브로커는 큐에 라우팅하지 않고 페이징 저널에 추가 메시지를 씁니다. 페이징 대신 이전 메시지를 사용할 때까지 클라이언트 측에서 더 많은 메시지 전송을 차단할 수 있습니다. 이러한 방식으로 생산자 흐름 제어를 차단하면 브로커가 언제든지 처리할 수 있는 것보다 더 많은 메시지를 보내는 생산자로 인해 메모리 부족을 방지할 수 있습니다.
구성에서 생산자 흐름 제어 차단은 주소 설정에 따라 관리됩니다. 구성은 주소에 등록된 모든 큐에 적용됩니다. 즉, 해당 주소에 바인딩된 모든 큐에 대한 총 메모리는 max-size-bytes 에 지정된 값으로 제한됩니다.
차단은 프로토콜에 따라 다릅니다. AMQ Broker에서 AMQP, Open>-<re 및 Core Protocol에서는 생산자 흐름 제어를 지원합니다. 그러나 AMQP는 흐름 제어를 다르게 처리합니다. 자세한 내용은 AMQP를 사용하여 흐름 제어 차단 을 참조하십시오.
주소의 최대 크기 구성
설정된 최대 바이트 수보다 큰 경우 메시지를 차단하도록 브로커를 구성하려면 새 addres-setting 구성 요소를 BROKER_INSTANCE_DIR/etc/broker.xml 에 추가합니다.
절차
-
아래 설정 예에서
address-setting은 최대300000바이트에 도달한 후 메시지를 전송하지 못하도록BLOCK생산자로 설정됩니다.
<configuration>
<core>
...
<address-settings>
<address-setting match="my.blocking.queue">
<max-size-bytes>300000</max-size-bytes>
<address-full-policy>BLOCK</address-full-policy>
</address-setting>
</address-settings>
</core>
</configuration>
10.1.2. AMQP 메시지 차단 링크 복사링크가 클립보드에 복사되었습니다!
이 장의 앞에서 설명한 대로 Core Protocol은 생산자 창 크기 흐름 제어 시스템을 사용합니다. 이 시스템에서 단위는 바이트를 나타내며 생산자에 할당됩니다. 프로듀서가 메시지를 보내려는 경우 메시지를 보내기 전에 메시지 크기를 수용하기에 충분한 지분을 가질 때까지 기다려야 합니다.
AMQP 흐름 제어 버스트는 바이트를 나타내지 않지만, 대신 메시지 크기에 관계없이 생산자가 보낼 수 있는 메시지의 수를 나타냅니다. 따라서 AMQP 클라이언트가 max-size-bytes 의 주소를 크게 초과하는 경우도 있습니다.
이 상황을 관리하려면 max-size-bytes-reject-threshold 요소를 address-setting 에 추가하여 주소 크기의 바이트에 상한을 지정합니다. 이 상한에 도달하면 브로커는 AMQP 메시지를 거부합니다. 기본적으로 max-size-bytes-reject-threshold 는 -1 로 설정되거나 제한이 없음으로 설정됩니다.
AMQP 메시지를 차단하도록 브로커 구성
AMQP 메시지 수가 설정된 최대 바이트 수보다 크면 새 addres-setting 구성 요소를 BROKER_INSTANCE_DIR/etc/broker.xml 에 추가하도록 브로커를 구성합니다.
절차
아래 구성 예제에서는
my.amqp.blocking.queue주소로 라우팅되는 모든 AMQP 메시지에 최대 크기300000바이트를 적용합니다.<configuration> <core> ... <address-settings> ... <address-setting match="my.amqp.blocking.queue">1 <max-size-bytes-reject-threshold>300000</max-size-bytes-reject-threshold>2 </address-setting> </address-settings> </core> </configuration>
추가 리소스
- AMQP 생산자에 대한 자세한 내용은 3장. 네트워크 연결: 프로토콜 을 참조하십시오.