검색

6.2. 데이터베이스에 메시지 데이터 유지

download PDF

데이터베이스에서 메시지 데이터를 저장하면 브로커는 JDBC( Java Database Connectivity ) 연결을 사용하여 메시지 및 바인딩 데이터를 데이터베이스 테이블에 저장합니다. 테이블의 데이터는 AMQ Broker 저널 인코딩을 사용하여 인코딩됩니다. 지원되는 데이터베이스에 대한 자세한 내용은 Red Hat Customer Portal의 Red Hat AMQ 7 지원 구성 을 참조하십시오.

중요

관리자는 조직의 광범위한 IT 인프라의 요구 사항에 따라 메시지 데이터를 데이터베이스에 저장하도록 선택할 수 있습니다. 그러나 데이터베이스를 사용하면 메시징 시스템의 성능에 부정적인 영향을 미칠 수 있습니다. 특히 JDBC를 통해 데이터베이스 테이블에 메시징 데이터를 작성하면 브로커에 상당한 성능 오버헤드가 발생합니다.

6.2.1. JDBC 지속성 구성

다음 절차에서는 데이터베이스 테이블에 메시지 및 바인딩 데이터를 저장하도록 브로커를 구성하는 방법을 보여줍니다.

프로세스

  1. 브로커 런타임에 적절한 JDBC 클라이언트 라이브러리를 추가합니다. 이렇게 하려면 관련 .JAR 파일을 < broker_instance_dir> /lib 디렉터리에 추가합니다.

    .JAR 파일을 다른 디렉토리에 추가하려면 Java classpath에 해당 디렉토리를 추가해야 합니다. 자세한 내용은 다음을 참조하십시오. 1.5절. “JAVA Classpath 확장”

  2. &lt ;broker_instance_dir&gt; /etc/broker.xml 구성 파일을 엽니다.
  3. core 요소 내에서 database- store 요소가 포함된 Store 요소를 추가합니다.

    <configuration>
      <core>
        <store>
           <database-store>
           </database-store>
        </store>
      </core>
    </configuration>
  4. database-store 요소 내에서 JDBC 지속성을 위한 구성 매개변수를 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.

    <configuration>
      <core>
        <store>
           <database-store>
              <jdbc-connection-url>jdbc:oracle:data/oracle/database-store;create=true</jdbc-connection-url>
              <jdbc-user>ENC(5493dd76567ee5ec269d11823973462f)</jdbc-user>
              <jdbc-password>ENC(56a0db3b71043054269d11823973462f)</jdbc-password>
              <bindings-table-name>BIND_TABLE</bindings-table-name>
              <message-table-name>MSG_TABLE</message-table-name>
              <large-message-table-name>LGE_TABLE</large-message-table-name>
              <page-store-table-name>PAGE_TABLE</page-store-table-name>
              <node-manager-store-table-name>NODE_TABLE</node-manager-store-table-name>
              <jdbc-driver-class-name>oracle.jdbc.driver.OracleDriver</jdbc-driver-class-name>
              <jdbc-network-timeout>10000</jdbc-network-timeout>
              <jdbc-lock-renew-period>2000</jdbc-lock-renew-period>
              <jdbc-lock-expiration>20000</jdbc-lock-expiration>
              <jdbc-journal-sync-period>5</jdbc-journal-sync-period>
              <jdbc-max-page-size-bytes>100K</jdbc-max-page-size-bytes>
           </database-store>
        </store>
      </core>
    </configuration>
    jdbc-connection-url
    데이터베이스 서버의 전체 JDBC 연결 URL입니다. 연결 URL에는 모든 구성 매개변수와 데이터베이스 이름이 포함되어야 합니다.
    jdbc-user
    데이터베이스 서버의 암호화된 사용자 이름입니다. 구성 파일에 사용할 사용자 이름 및 암호를 암호화하는 방법에 대한 자세한 내용은 5.9절. “구성 파일에서 암호 암호화” 을 참조하십시오.
    jdbc-password
    데이터베이스 서버의 암호화된 암호입니다. 구성 파일에 사용할 사용자 이름 및 암호를 암호화하는 방법에 대한 자세한 내용은 5.9절. “구성 파일에서 암호 암호화” 을 참조하십시오.
    bindings-table-name
    바인딩 데이터가 저장되는 테이블의 이름입니다. 테이블 이름을 지정하면 간섭 없이 여러 서버 간에 단일 데이터베이스를 공유할 수 있습니다.
    message-table-name
    메시지 데이터가 저장되는 테이블의 이름입니다. 이 테이블 이름을 지정하면 간섭 없이 여러 서버 간에 단일 데이터베이스를 공유할 수 있습니다.
    large-message-table-name
    큰 메시지 및 관련 데이터가 유지되는 테이블의 이름입니다. 또한 클라이언트가 청크에서 큰 메시지를 스트리밍하면 청크가 이 테이블에 저장됩니다. 이 테이블 이름을 지정하면 간섭 없이 여러 서버 간에 단일 데이터베이스를 공유할 수 있습니다.
    page-store-table-name
    페이지 저장된 저장소 디렉터리 정보가 저장되는 테이블의 이름입니다. 이 테이블 이름을 지정하면 간섭 없이 여러 서버 간에 단일 데이터베이스를 공유할 수 있습니다.
    node-manager-store-table-name
    라이브 및 백업 브로커에 대한 공유 저장소 HA(고가용성) 잠금 및 기타 HA 관련 데이터가 브로커 서버에 저장되는 테이블의 이름입니다. 이 테이블 이름을 지정하면 간섭 없이 여러 서버 간에 단일 데이터베이스를 공유할 수 있습니다. 공유 저장소 HA를 사용하는 각 라이브 백업 쌍은 동일한 테이블 이름을 사용해야 합니다. 동일한 테이블을 여러 개(및 관련이 없는) 라이브 백업 쌍 간에 공유할 수 없습니다.
    jdbc-driver-class-name
    JDBC 데이터베이스 드라이버의 정규화된 클래스 이름입니다. 지원되는 데이터베이스에 대한 자세한 내용은 Red Hat Customer Portal의 Red Hat AMQ 7 지원 구성 을 참조하십시오.
    jdbc-network-timeout
    JDBC 네트워크 연결 제한 시간(밀리초)입니다. 기본값은 20000밀리초입니다. 공유 저장소 HA에 JDBC를 사용하는 경우 시간 제한을 jdbc-lock-expiration 보다 작거나 같은 값으로 설정하는 것이 좋습니다.
    jdbc-lock-renew-period
    현재 JDBC 잠금에 대한 갱신 기간의 길이(밀리초)입니다. 이 시간이 지나면 브로커는 잠금을 갱신할 수 있습니다. jdbc-lock-expiration 값보다 작은 값을 설정하는 것이 좋습니다. 이를 통해 브로커는 리스를 연장할 수 있는 충분한 시간을 제공하고 브로커에게 연결 문제 발생 시 잠금을 갱신할 수 있는 시간을 제공합니다. 기본값은 2000밀리초입니다.
    jdbc-lock-expiration

    jdbc-lock-renew-period 값이 경과하더라도 현재 JDBC 잠금이 보유(즉, 획득 또는 갱신됨)로 간주되는 시간(밀리초)입니다.

    브로커는 jdbc-lock-renew-period 의 값에 따라 소유되는 잠금을 주기적으로 갱신하려고 합니다. 브로커가 잠금을 갱신 하지 못하는 경우(예: 연결 문제로 인해) 브로커는 잠금을 성공적으로 취득하거나 갱신한 이후 jdbc-lock-expiration 값이 전달될 때까지 잠금을 갱신하려고 합니다.

    위에서 설명한 갱신 동작의 예외는 다른 브로커가 잠금을 취득하는 경우입니다. 이는 DBMS(데이터베이스 관리 시스템)와 브로커 간에 시간 불일치가 있거나 가비지 수집에 대한 일시 중지가 긴 경우 발생할 수 있습니다. 이 경우 원래 잠금을 보유한 브로커는 잠금을 손실하고 갱신하려고 시도하지 않습니다.

    만료 시간이 경과하면 JDBC 잠금이 현재 소유하고 있는 브로커에 의해 갱신되지 않은 경우 다른 브로커는 JDBC 잠금을 설정할 수 있습니다.

    jdbc-lock-expiration 의 기본값은 20000밀리초입니다.

    jdbc-journal-sync-period
    브로커 저널이 JDBC와 동기화되는 기간(밀리초)입니다. 기본값은 5밀리초입니다.
    jdbc-max-page-size-bytes
    AMQ Broker가 JDBC 데이터베이스에 메시지를 저장할 때 각 페이지 파일의 최대 크기(바이트)입니다. 기본값은 102400 이며, 이는 100KB입니다. 지정한 값은 "K" "MB" 및 "GB"와 같은 바이트 표기법도 지원합니다.

6.2.2. JDBC 연결 풀링 구성

JDBC 지속성을 위해 브로커를 구성한 경우 브로커는 JDBC 연결을 사용하여 메시지 및 바인딩 데이터를 데이터베이스 테이블에 저장합니다.

JDBC 연결 오류가 발생하고 오류가 발생할 때 데이터베이스 읽기 또는 쓰기와 같은 활성 연결 활동(예: 데이터베이스 읽기 또는 쓰기)이 없는 경우 브로커는 계속 실행되고 데이터베이스 연결을 다시 설정하려고 합니다. 이를 위해 AMQ Broker는 JDBC 연결 풀링 을 사용합니다.

일반적으로 연결 풀은 여러 애플리케이션 간에 공유할 수 있는 지정된 데이터베이스에 대한 열린 연결 세트를 제공합니다. 브로커의 경우 브로커와 데이터베이스 간의 연결이 실패하면 브로커는 풀과 다른 연결을 사용하여 데이터베이스에 다시 연결을 시도합니다. 풀은 브로커가 수신하기 전에 새 연결을 테스트합니다.

다음 예제에서는 JDBC 연결 풀링을 구성하는 방법을 보여줍니다.

중요

JDBC 연결 풀링을 명시적으로 구성하지 않으면 브로커는 기본 구성과 연결 풀링을 사용합니다. 기본 구성에서는 기존 JDBC 구성의 값을 사용합니다. 자세한 내용은 기본 연결 풀링 구성 을 참조하십시오.

사전 요구 사항

프로세스

  1. &lt ;broker-instance-dir&gt; /etc/broker.xml 구성 파일을 엽니다.
  2. 이전에 JDBC 구성에 추가한 database-store 요소 내에서 jdbc-driver-class-name,jdbc-connection-url,jdbc-user,jdbc-password, 매개변수를 제거합니다. 이 절차의 뒷부분에서 해당 DBCP 구성 매개변수로 교체합니다.

    참고

    이전 매개변수를 명시적으로 제거하지 않으면 이 절차의 뒷부분에서 추가하는 해당 DBCP 매개변수가 우선합니다.

  3. database-store 요소 내에서 data-source-properties 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <store>
        <database-store>
            <data-source-properties>
            </data-source-properties>
            <bindings-table-name>BINDINGS</bindings-table-name>
            <message-table-name>MESSAGES</message-table-name>
            <large-message-table-name>LARGE_MESSAGES</large-message-table-name>
            <page-store-table-name>PAGE_STORE</page-store-table-name>
            <node-manager-store-table-name>NODE_MANAGER_STORE</node-manager-store-table-name>
            <jdbc-network-timeout>10000</jdbc-network-timeout>
            <jdbc-lock-renew-period>2000</jdbc-lock-renew-period>
            <jdbc-lock-expiration>20000</jdbc-lock-expiration>
            <jdbc-journal-sync-period>5</jdbc-journal-sync-period>
        </database-store>
    </store>
  4. 새로운 data-source-properties 요소 내에서 연결 풀링을 위한 DBCP 데이터 소스 속성을 추가합니다. 키-값 쌍을 지정합니다. 예를 들면 다음과 같습니다.

    <store>
        <database-store>
            <data-source-properties>
                <data-source-property key="driverClassName" value="com.mysql.jdbc.Driver" />
                <data-source-property key="url" value="jdbc:mysql://localhost:3306/artemis" />
                <data-source-property key="username" value="ENC(5493dd76567ee5ec269d1182397346f)"/>
                <data-source-property key="password" value="ENC(56a0db3b71043054269d1182397346f)"/>
                <data-source-property key="poolPreparedStatements" value="true" />
                <data-source-property key="maxTotal" value="-1" />
            </data-source-properties>
            <bindings-table-name>BINDINGS</bindings-table-name>
            <message-table-name>MESSAGES</message-table-name>
            <large-message-table-name>LARGE_MESSAGES</large-message-table-name>
            <page-store-table-name>PAGE_STORE</page-store-table-name>
            <node-manager-store-table-name>NODE_MANAGER_STORE</node-manager-store-table-name>
            <jdbc-network-timeout>10000</jdbc-network-timeout>
            <jdbc-lock-renew-period>2000</jdbc-lock-renew-period>
            <jdbc-lock-expiration>20000</jdbc-lock-expiration>
            <jdbc-journal-sync-period>5</jdbc-journal-sync-period>
        </database-store>
    </store>
    driverClassName
    JDBC 데이터베이스 드라이버의 정규화된 클래스 이름입니다.
    url
    데이터베이스 서버의 전체 JDBC 연결 URL입니다.
    사용자 이름
    데이터베이스 서버의 암호화된 사용자 이름입니다. 이 값을 암호화되지 않은 일반 텍스트로 지정할 수도 있습니다. 구성 파일에 사용할 사용자 이름 및 암호를 암호화하는 방법에 대한 자세한 내용은 5.9절. “구성 파일에서 암호 암호화” 을 참조하십시오.
    암호
    데이터베이스 서버의 암호화된 암호입니다. 이 값을 암호화되지 않은 일반 텍스트로 지정할 수도 있습니다. 구성 파일에 사용할 사용자 이름 및 암호를 암호화하는 방법에 대한 자세한 내용은 5.9절. “구성 파일에서 암호 암호화” 을 참조하십시오.
    poolPreparedStatements
    이 매개 변수의 값을 true 로 설정하면 풀에 캐시된 준비된 문 수가 무제한일 수 있습니다. 이렇게 하면 초기화 비용이 줄어듭니다.
    maxTotal
    풀의 최대 연결 수입니다. 이 매개 변수의 값을 -1 로 설정하면 제한이 없습니다.

JDBC 연결 풀링을 명시적으로 구성하지 않으면 브로커는 기본 구성과 연결 풀링을 사용합니다. 기본 구성은 표에 설명되어 있습니다.

표 6.1. 기본 연결 풀링 구성
DBCP 구성 매개변수기본값

driverClassName

기존 jdbc-driver-class-name 매개변수의 값

url

기존 jdbc-connection-url 매개변수의 값

사용자 이름

기존 jdbc-user 매개변수의 값

암호

기존 jdbc-password 매개변수의 값

poolPreparedStatements

true

maxTotal

-1

참고

재연결은 클라이언트가 브로커에 적극적으로 메시지를 보내지 않는 경우에만 작동합니다. 다시 연결하는 동안 데이터베이스 테이블에 쓰기 시도가 있으면 브로커가 실패하고 종료됩니다.

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.