9장. 손상된 연결 감지


때때로 클라이언트는 예기치 않게 중지되고 리소스를 정리할 기회가 없습니다. 이 경우 리소스를 결함이 있는 상태로 두고 브로커가 메모리 또는 기타 시스템 리소스가 부족해질 수 있습니다. 브로커는 가비지 컬렉션 시 클라이언트 연결이 제대로 종료되지 않았음을 감지합니다. 연결이 닫히고 아래와 유사한 메시지가 로그에 기록됩니다. 로그는 클라이언트 세션이 인스턴스화된 정확한 코드 라인을 캡처합니다. 이를 통해 오류를 식별하고 수정할 수 있습니다.

[Finalizer] 20:14:43,244 WARNING [org.apache.activemq.artemis.core.client.impl.DelegatingSession]  I'm closing a JMS Conection you left open. Please make sure you close all connections explicitly before let
ting them go out of scope!
[Finalizer] 20:14:43,244 WARNING [org.apache.activemq.artemis.core.client.impl.DelegatingSession]  The session you didn't close was created here:
java.lang.Exception
   at org.apache.activemq.artemis.core.client.impl.DelegatingSession.<init>(DelegatingSession.java:83)
   at org.acme.yourproject.YourClass (YourClass.java:666) 
1
1
연결이 인스턴스화된 클라이언트 코드의 행입니다.

클라이언트 측에서 영구 연결 감지

브로커로부터 데이터를 수신하는 한 클라이언트는 연결을 활성으로 간주합니다. client-failure-check-period 속성에 대한 값을 제공하여 클라이언트가 실패 연결을 확인하도록 구성합니다. 네트워크 연결의 기본 검사 기간은 30000밀리초이며 In-VM 연결의 기본값은 -1 입니다. 즉, 데이터가 수신되지 않으면 클라이언트가 해당 측에서 연결을 실패하지 않습니다.

일반적으로 점검 기간을 브로커의 연결 시간-라이브에 사용된 값보다 훨씬 낮게 설정하여 일시적인 오류가 발생할 경우 클라이언트가 다시 연결할 수 있도록 합니다.

아래 예제에서는 코어 JMS 클라이언트를 사용하여 점검 기간을 10000밀리초로 설정하는 방법을 보여줍니다.

절차

  • 손실된 연결 감지에 대한 검사 기간을 설정합니다.

    • Core JMS 클라이언트와 함께 JNDI를 사용하는 경우 JNDI 컨텍스트 환경(예: jndi.properties ) 내에서 검사 기간을 설정합니다.

      java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
      connectionFactory.myConnectionFactory=tcp://localhost:61616?clientFailureCheckPeriod=10000
    • JNDI를 사용하지 않는 경우 ActiveMQConnectionFactory.setClientFailureCheckPeriod() 에 값을 전달하여 검사 기간을 직접 설정합니다.

      ConnectionFactory cf =  ActiveMQJMSClient.createConnectionFactory(...)
      cf.setClientFailureCheckPeriod(10000);

9.1. 연결 Time-To-Live

클라이언트와 서버 간의 네트워크 연결이 실패하고 다시 온라인 상태가 될 수 있으므로 클라이언트가 다시 연결할 수 있으므로 AMQ Broker에서 비활성 서버 측 리소스를 정리할 때까지 기다립니다. 이러한 대기 기간을 TTL(Time-to-Live)이라고 합니다. 네트워크 기반 연결의 기본 TTL은 60000 밀리초(1분)입니다. In-VM 연결의 기본 TTL은 -1 이며, 이는 브로커가 브로커 측의 연결을 초과하지 않음을 의미합니다.

브로커에서 Time-To-Live 구성

클라이언트가 자체 연결 TTL을 지정하지 않도록 하려면 브로커 측에 글로벌 값을 설정할 수 있습니다. 이 작업은 브로커 구성에 connection-ttl-override 요소를 지정하여 수행할 수 있습니다.

connection-ttl-check-interval 요소에 의해 결정된 대로 TTL 위반에 대한 연결을 확인하는 논리가 브로커에서 주기적으로 실행됩니다.

절차

  • connection-ttl-override 구성 요소를 추가하고 아래 예제와 같이 BROKER_INSTANCE_DIR/etc/broker.xml을 편집합니다.

    <configuration>
     <core>
      ...
      <connection-ttl-override>30000</connection-ttl-override> 
    1
    
      <connection-ttl-check-interval>1000</connection-ttl-check-interval> 
    2
    
      ...
     </core>
    </configuration>
    1
    모든 연결에 대한 글로벌 TTL은 30000밀리초로 설정됩니다. 기본값은 -1 이며, 클라이언트가 고유한 TTL을 설정할 수 있습니다.
    2
    사용 중인 연결을 점검하는 간격은 1000밀리초로 설정됩니다. 기본적으로 검사는 2000밀리초 마다 수행됩니다.

클라이언트에서 Time-To-Live 구성

기본적으로 클라이언트는 자체 연결에 대한 TTL을 설정할 수 있습니다. 아래 예제에서는 코어 JMS 클라이언트를 사용하여 Time-To-Live를 설정하는 방법을 보여줍니다.

절차

  • 클라이언트 연결의 Time-To-Live를 설정합니다.

    • JNDI를 사용하여 연결 팩토리를 인스턴스화하는 경우 매개 변수 connectionTTL 을 사용하여 XML 구성에서 지정할 수 있습니다.

      java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
      connectionFactory.myConnectionFactory=tcp://localhost:61616?connectionTTL=30000
    • JNDI를 사용하지 않는 경우 연결 TTL은 ActiveMQConnectionFactory 인스턴스의 ConnectionTTL 특성에 의해 정의됩니다.

      ConnectionFactory cf =  ActiveMQJMSClient.createConnectionFactory(...)
      cf.setConnectionTTL(30000);
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

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

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

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

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동