19장. 흐름 제어
흐름 제어를 사용하면 메시징 참여자가 부담을 주지 않도록 클라이언트와 서버 간의 메시징 데이터 흐름을 제한할 수 있습니다. 소비자 측과 생산자 측 모두에서 데이터 흐름을 관리할 수 있습니다.
19.1. 소비자 흐름 제어 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징에는 소비자 대신 사전 가져오기할 데이터 양을 정의하고 소비자가 메시지를 사용할 수 있는 속도를 제어하는 구성이 포함되어 있습니다.
창 기반 흐름 제어
JBoss EAP 메시징은 각 소비자의 버퍼에 메시지를 사전 가져오기합니다. 버퍼 크기는 connection- factory
의 consumer-window-size
특성에 따라 결정됩니다. 아래 구성 예에서는 consumer- window
를 보여줍니다.
-size 특성이 명시적으로 설정된 connection-
factory
<connection-factory name="MyConnFactory" ... consumer-window-size="1048576" />
<connection-factory name="MyConnFactory" ... consumer-window-size="1048576" />
관리 CLI를 사용하여 지정된 connection-factory
에 대한 consumer-window-size
특성 값을 읽고 씁니다. 아래 예에서는 InVmConnectionFactory
연결 팩토리를 사용하여 수행한 방법을 보여줍니다. 이 팩토리는 서버와 동일한 가상 시스템에 상주하는 소비자의 기본값입니다(예: 로컬 MessageDrivenBean
).
-
관리 CLI에서
InVmConnectionFactory의
특성을 읽습니다.consumer
-window-size
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-window-size) { "outcome" => "success", "result" => 1048576 }
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-window-size)
{
"outcome" => "success",
"result" => 1048576
}
-
관리 CLI에서
consumer-window-size
속성을 작성합니다.
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-window-size,value=1048576) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-window-size,value=1048576)
{"outcome" => "success"}
consumer-window-size
의 값은 정수여야 합니다. 아래 표에 명시된 대로 일부 값은 특별한 의미를 갖습니다.
현재의 | 설명 |
---|---|
n |
버퍼 크기를 |
0 | 버퍼링을 끕니다. 이는 느린 소비자에게 도움이 될 수 있으며 여러 소비자에 걸쳐 결정적인 배포를 제공할 수 있습니다. |
-1 | 바인딩되지 않은 버퍼를 생성합니다. 이를 통해 신속하게 메시지를 수신하는 대로 신속하게 메시지를 가져오고 처리할 수 있는 매우 빠른 소비자가 도움이 될 수 있습니다. |
consumer-window-size
를 -1
로 설정하면 소비자가 메시지를 받는 것처럼 빠르게 메시지를 처리할 수 없는 경우 클라이언트 메모리가 오버플로될 수 있습니다.
코어 API를 사용하는 경우 set ConsumerWindowSize() 메서드를 사용하여
할 수 있습니다.
ServerLocator
에서 소비자 창 크기를 설정
Jakarta Messaging을 사용하는 경우 클라이언트는 인스턴스화 ConnectionFactory
의 setConsumerWindowSize()
메서드를 사용하여 소비자 창 크기를 지정할 수 있습니다.
속도 제한 흐름 제어
JBoss EAP 메시징은 제한이라고 하는 흐름 제어 방법인 초당 사용하는 메시지의 속도를 조정할 수 있습니다. 적절한
특성을 사용하여 소비자가 지정된 속도보다 빠른 속도로 메시지를 사용하지 않도록 합니다.
connection-factory의 consumer-max-
rate
<connection-factory name="MyConnFactory" ... consumer-max-rate="10" />
<connection-factory name="MyConnFactory" ... consumer-max-rate="10" />
기본값은 -1
로, 속도 제한 흐름 제어를 비활성화합니다.
관리 CLI는 consumer-max-rate
특성을 읽고 쓰는 데 권장되는 방법입니다. 아래 예에서는 InVmConnectionFactory
연결 팩토리(예: 로컬 MessageDrivenBean
)와 동일한 가상 시스템에 상주하는 소비자의 기본값인 InVmConnectionFactory 연결 팩토리를 사용하여 수행한 방법을 보여줍니다.
-
관리 CLI를 사용하여
consumer-max-rate
속성 읽기
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-max-rate) { "outcome" => "success", "result" => -1 }
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-max-rate)
{
"outcome" => "success",
"result" => -1
}
-
관리 CLI를 사용하여
consumer-max-rate
속성을 작성합니다.
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-max-rate,value=100) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-max-rate,value=100)
{"outcome" => "success"}
Jakarta Messaging을 사용하는 경우 인스턴스화된 ConnectionFactory
의 setConsumerMaxRate(int consumerMaxRate) 방법을 사용하여 최대 속도 크기를 설정할 수 있습니다.
Core API를 사용하는 경우 속도는 ServerLocator.setConsumerMaxRate(int consumerMaxRate)
메서드로 설정할 수 있습니다.