24.6. 클라이언트 스레드 관리

JBoss EAP에는 클라이언트 연결을 생성하는 데 사용되는 클라이언트 스레드 풀이 포함되어 있습니다. 이 풀은 이 장의 앞부분에서 언급한 정적 풀과 별개이며 클라이언트처럼 작동하는 경우 JBoss EAP에서 사용합니다. 예를 들어 클라이언트 스레드 풀 클라이언트는 동일한 클러스터에 있는 다른 노드와 클러스터 연결로 생성되거나 Artemis 리소스 어댑터가 JBoss EAP의 원격 인스턴스에 통합된 원격 Apache ActiveMQ Artemis 메시징 서버에 연결됩니다. 예약된 클라이언트 스레드에 대한 풀도 있습니다.

참고

JBoss EAP 7.1이 릴리스되면서 클라이언트 스레드는 활동 없이 60초 후에 시간 초과됩니다.

관리 CLI를 사용하여 클라이언트 스레드 풀 크기 설정

관리 CLI를 사용하여 클라이언트 스레드 풀과 클라이언트 예약 스레드 풀의 크기를 구성합니다. 관리 CLI를 사용하여 설정한 풀 크기는 시스템 속성을 사용하여 설정된 크기보다 우선합니다.

아래 명령은 클라이언트 스레드 풀을 설정합니다.

/subsystem=messaging-activemq:write-attribute(name=global-client-thread-pool-max-size,value=POOL_SIZE)

이 속성에 대해 정의된 기본값은 없습니다. 특성이 정의되지 않은 경우 풀의 최대 크기는 CPU 코어 프로세서 수의 8 (8)로 결정됩니다.

현재 설정을 검토하려면 다음 명령을 사용합니다.

/subsystem=messaging-activemq:read-attribute(name=global-client-thread-pool-max-size)

클라이언트 예약 스레드 풀 크기는 다음 명령을 사용하여 설정됩니다.

/subsystem=messaging-activemq:write-attribute(name=global-client-scheduled-thread-pool-max-size,value=POOL_SIZE)

다음은 클라이언트 예약 스레드 풀의 현재 풀 크기를 표시합니다. 기본값은 5 입니다.

/subsystem=messaging-activemq:read-attribute(name=global-client-scheduled-thread-pool-max-size)

시스템 속성을 사용하여 클라이언트 스레드 풀 크기 설정

다음 시스템 속성을 사용하여 클라이언트의 글로벌 및 글로벌 예약 스레드 풀 크기를 각각 설정할 수 있습니다.

  • activemq.artemis.client.global.thread.pool.max.size
  • activemq.artemis.client.global.scheduled.thread.pool.core.size

아래 예제와 같이 시스템 속성을 XML 구성에서 참조할 수 있습니다.

참고

관리 CLI를 사용하여 설정된 풀 크기는 시스템 속성으로 설정된 크기보다 우선합니다.

<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
  <global-client thread-pool-max-size="${activemq.artemis.client.global.thread.pool.max.size}"
    scheduled-thread-pool-max-size="${activemq.artemis.client.global.scheduled.thread.pool.core.size}" />
  <server ...>
  </server>
  ...
</subsystem>

자체 스레드 풀을 사용하도록 클라이언트 구성

클라이언트는 JBoss EAP에서 제공하는 풀을 사용하지 않고 자체 클라이언트 스레드 풀을 사용하도록 각 ClientSessionFactory 인스턴스를 구성할 수 있습니다. 해당 세션에서 ClientSessionFactory 를 생성한 모든 세션은 새로 생성된 풀을 사용합니다.

자체 풀을 사용하도록 ClientSessionFactory 인스턴스를 구성하려면 팩토리를 만든 직후 적절한 setter 메서드를 호출합니다. 예를 들면 다음과 같습니다.

ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(transportConfiguration);
locator.setUseGlobalPools(true);
locator.setThreadPoolMaxSize(-1);
locator.setScheduledThreadPoolMaxSize(10);
ClientSessionFactory myFactory = locator.createSessionFactory();

Jakarta Messaging API를 사용하는 경우 ClientSessionFactory 에서 동일한 매개변수를 설정할 수 있습니다. 예를 들면 다음과 같습니다.

ActiveMQConnectionFactory myConnectionFactory = ActiveMQJMSClient.createConnectionFactory(url, "ConnectionFactoryName");
myConnectionFactory.setUseGlobalPools(false);
myConnectionFactory.setScheduledThreadPoolMaxSize(10);
myConnectionFactory.setThreadPoolMaxSize(-1);

JNDI를 사용하여 ActiveMQConnectionFactory 인스턴스를 인스턴스화하는 경우 JBoss EAP의 독립 실행형 인스턴스에 대해 아래 제공된 예제와 같이 관리 CLI를 사용하여 이러한 매개변수를 설정할 수도 있습니다.

/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=use-global-pools,value=false)

/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=scheduled-thread-pool-max-size,value=10)

/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=thread-pool-max-size,value=1)

위의 각 명령을 실행한 후에는 관리 CLI에서 인스턴스를 다시 로드해야 한다는 메시지를 표시합니다.