6.2. 데이터베이스의 메시지 데이터 저장
데이터베이스에서 메시지 데이터를 저장하면 브로커는 JDBC( Java Database Connectivity ) 연결을 사용하여 메시지 및 바인딩 데이터를 데이터베이스 테이블에 저장합니다. 테이블의 데이터는 AMQ Broker 저널 인코딩을 사용하여 인코딩됩니다. 지원되는 데이터베이스에 대한 자세한 내용은 Red Hat 고객 포털의 Red Hat AMQ 7 지원 구성 을 참조하십시오.
관리자는 조직의 광범위한 IT 인프라의 요구 사항에 따라 메시지 데이터를 데이터베이스에 저장하도록 선택할 수 있습니다. 그러나 데이터베이스를 사용하면 메시징 시스템의 성능에 부정적인 영향을 미칠 수 있습니다. 특히 JDBC를 통해 데이터베이스 테이블에 메시징 데이터를 작성하면 브로커에 대한 심각한 성능 오버헤드가 발생합니다.
6.2.1. JDBC 지속성 구성
다음 절차에서는 데이터베이스 테이블에 메시지 및 바인딩 데이터를 저장하도록 브로커를 구성하는 방법을 보여줍니다.
절차
-
적절한 JDBC 클라이언트 라이브러리를 브로커 런타임에 추가합니다. 이렇게 하려면 관련
.jar
파일을 <broker_instance_dir> /lib
디렉터리에 추가합니다. -
<
broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. core
요소 내에서database-
요소를 포함하는 store 요소를 추가합니다.store
<configuration> <core> <store> <database-store> </database-store> </store> </core> </configuration>
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>BINDINGS_TABLE</bindings-table-name> <message-table-name>MESSAGE_TABLE</message-table-name> <large-message-table-name>LARGE_MESSAGES_TABLE</large-message-table-name> <page-store-table-name>PAGE_STORE_TABLE</page-store-table-name> <node-manager-store-table-name>NODE_MANAGER_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> </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
- paged store 디렉토리 정보가 저장된 테이블의 이름입니다. 이 테이블 이름을 지정하면 간섭없이 여러 서버 간에 단일 데이터베이스를 공유할 수 있습니다.
- node-manager-store-table-name
- 실시간 및 백업 브로커에 대한 공유 저장소 HA(고가용성) 잠금 및 기타 HA 관련 데이터가 브로커 서버에 저장되는 테이블의 이름입니다. 이 테이블 이름을 지정하면 간섭없이 여러 서버 간에 단일 데이터베이스를 공유할 수 있습니다. 공유 저장소 HA를 사용하는 각 라이브 백업 쌍은 동일한 테이블 이름을 사용해야 합니다. 여러 (및 관련이 없는) 실시간 백업 쌍 간에 동일한 테이블을 공유할 수 없습니다.
- jdbc-driver-class-name
- JDBC 데이터베이스 드라이버의 정규화된 클래스 이름입니다. 지원되는 데이터베이스에 대한 자세한 내용은 Red Hat 고객 포털의 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
J
dbc-lock-renew-period의 값이 경과하더라도 현재 JDBC 잠금이 소유하는 것으로 간주되는 시간(즉, 인수, 갱신
또는 갱신)입니다.브로커는 정기적으로
jdbc-lock-renew-period
값에 따라 소유한 잠금을 갱신하려고 합니다. 브로커 가 연결 문제로 인한 잠금을 갱신하지 못하면 브로커가jdbc-lock-expiration
값이 마지막으로 성공적으로 취득되거나 갱신된 이후의 값이 통과될 때까지 브로커가 잠금을 갱신하려고 합니다.위에서 설명한 갱신 동작에 대한 예외는 다른 브로커가 잠금을 취득하는 경우입니다. 이는 DBMS(Database Management System)와 브로커 간에 오류가 있거나 가비지 수집의 긴 일시 중단이 있는 경우 발생할 수 있습니다. 이 경우 원래 잠금을 소유한 브로커는 손실 된 잠금을 고려하고 갱신하지 않습니다.
만료 시간이 경과된 후 JDBC 잠금이 현재 보유 중인 브로커에 의해 갱신되지 않은 경우 다른 브로커는 JDBC 잠금을 설정할 수 있습니다.
jdbc-lock-expiration
의 기본값은 20000밀리초입니다.- jdbc-journal-sync-period
- 브로커 저널이 JDBC와 동기화하는 기간(밀리초)입니다. 기본값은 5밀리초입니다.