10.3. JDBC 데이터베이스를 사용한 메시징 저널 지속성
기본 파일 기반 저널을 사용하는 대신 메시지 및 바인딩 데이터를 데이터베이스에 바인딩하도록 JDBC를 사용하려면 JBoss EAP 7 메시징을 구성해야 합니다.
이렇게 하려면 먼저 데이터 소스 하위 시스템에서
소스를 사용하도록 datasource
요소를 구성한 다음 해당 데이터messaging
속성을 정의해야 합니다. -activemq 하위 시스템의
datasourceserver
요소에 journal-journal-datasource
특성이 있으면 메시징 하위 시스템에서 파일 기반 저널 대신 데이터베이스에 저널 항목을 지속하도록 알립니다. messaging-tekton 하위 시스템의
속성은 데이터베이스와 통신하는 데 사용되는 SQL languageect를 정의합니다. 이 속성은 데이터 소스 메타데이터를 사용하여 자동으로 구성됩니다.
서버
리소스에 대한 journal-
database
파일 기반 저널에 메시지를 유지하는 경우 큰 메시지 크기는 디스크 크기만으로 제한됩니다. 그러나 메시지를 데이터베이스에 보관할 때 큰 메시지 크기는 해당 데이터베이스에 대한 BLOB
데이터 유형의 최대 크기로 제한됩니다.
JBoss EAP 7.4는 현재 Oracle 12c 및 IBM DB2 Enterprise 데이터베이스만 지원합니다.
10.3.1. 데이터베이스 영구 저장소 구성 고려 사항 링크 복사링크가 클립보드에 복사되었습니다!
안정성 향상을 위해 JBoss EAP는 연결 풀을 통해 메시징 호출을 수행하므로 여러 애플리케이션에서 공유할 수 있는 지정된 데이터베이스에 대한 열린 연결 세트를 제공합니다. 즉, JBoss EAP가 연결을 떨어지면 풀의 다른 연결은 실패를 방지하기 위해 실패한 연결을 대체합니다.
이전 버전의 JBoss EAP는 풀에서 하나의 연결만 지원합니다.
데이터 소스 하위 시스템에서 데이터베이스 영구 저장소 또는 풀을 구성하는 경우 다음 포인트를 고려하십시오.
min-pool-size
특성 값을 최소 4개로 설정하여 다음 사용 시 각각에 대한 연결을 전용으로 지정합니다.- 바인딩된 경우One for the binding
- 메시지 저널에 대한 1개
- High Availability (HA)를 사용하는 경우 리스 잠금을 위한 것입니다.
- HA를 사용하는 경우 노드 관리자 공유 상태용 1개
-
페이징 또는 대용량 메시지 스트리밍 작업을 수행하는 동시 스레드 수에 따라
max-pool-size
속성 값을 설정합니다. 스레드 수와 연결 수가 일대일이 아니므로max-pool-size
특성을 구성하기 위한 규칙이 정의되지 않습니다.
연결 수는 페이징 및 대용량 메시지 작업을 처리하는 스레드 수와 연결을 받기 위한 대기 시간을 정의하는 attribute blocking-timeout-wait-밀리코어is
에 따라 달라집니다.
새로운 큰 메시지 또는 페이징 작업이 전용 스레드에서 발생하며 연결이 필요합니다. 이러한 전용 스레드는 연결이 준비되거나 연결을 가져올 시간이 없어 오류가 발생할 때까지 큐에 추가됩니다.
요구 사항에 따라 풀 구성을 사용자 지정하고 해당 환경에서 구성된 풀을 테스트할 수 있습니다.
10.3.2. 메시징 저널 JDBC 지속성 저장소 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 단계에 따라 JDBC를 사용하여 메시지를 유지하고 데이터를 데이터베이스에 바인딩하도록 JBoss EAP 7 메시징을 구성합니다.
-
messaging-
tekton 하위 시스템에서 사용할 데이터 소스 하위 시스템에서 데이터 소스를 구성합니다. 데이터 소스를 생성하고 구성하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드의 데이터 소스 관리를 참조하십시오. 새 데이터 소스를 사용하도록
messaging-activemq
하위 시스템을 구성합니다./subsystem=messaging-activemq/server=default:write-attribute(name=journal-datasource,value="MessagingOracle12cDS")
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-datasource,value="MessagingOracle12cDS")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면 서버 구성 파일의
messaging-tekton
하위 시스템에 다음 구성이 생성됩니다.<server name="default"> <journal datasource="MessagingOracle12cDS"/> ... </server>
<server name="default"> <journal datasource="MessagingOracle12cDS"/> ... </server>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JBoss EAP 메시징은 이제 데이터베이스를 사용하여 메시징 데이터를 저장하도록 구성되어 있습니다.
10.3.3. 메시징 저널 테이블 이름 구성 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 7 메시징은 별도의 JDBC 테이블을 사용하여 바인딩 정보, 메시지, 대용량 메시지 및 페이징 정보를 저장합니다. 이러한 테이블의 이름은 서버
구성 파일의 messaging
특성을 사용하여 구성할 수 있습니다.
-activemq 하위 시스템에서 journal
-bindings-table,
journal-jms
-bindings-table,
tablejournal-messages
-table, journal-page-store-
다음은 테이블 이름 제한 목록입니다.
-
JBoss EAP 7 메시징은 GENERATED _ ID가 최대 20자까지 될 수 있는 패턴 TABLE_NAME + GENERATED _ID 를 사용하여 페이징 테이블의 식별자를 생성합니다. Oracle Database 12c의 최대 테이블 이름 길이는 30자이므로 테이블 이름을 10자로 제한해야 합니다. 그렇지 않으면
ORA-00972: 식별자가 너무 길고 페이징이
더 이상 작동하지 않습니다. - Oracle Database 12c에 대한 스키마 오브젝트 명명 규칙을 따르지 않는 테이블 이름은 큰따옴표로 묶어야 합니다. 따옴표로 묶은 식별자는 모든 문자로 시작할 수 있으며 문자와 문장 부호는 물론 공백을 포함할 수 있습니다. 그러나 따옴표로 묶거나 따옴표가 없는 식별자는 겹따옴표나 null 문자(\0)를 포함할 수 없습니다. 따옴표로 묶은 식별자는 대소문자를 구분하는 것이 중요합니다.
- 여러 JBoss EAP 서버 인스턴스에서 동일한 데이터베이스를 사용하여 메시지 및 바인딩 데이터를 유지하는 경우 테이블 이름은 각 서버 인스턴스에 대해 고유해야 합니다. 여러 JBoss EAP 서버는 동일한 테이블에 액세스할 수 없습니다.
다음은 인용된 식별자를 사용하여 journal-page-store-table
이름을 구성하는 관리 CLI 명령의 예입니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-page-store-table,value="\"PAGE_DATA\"")
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-page-store-table,value="\"PAGE_DATA\"")
이렇게 하면 서버 구성 파일의 messaging-tekton
하위 시스템에 다음 구성이 생성됩니다.
<server name="default"> <journal datasource="MessagingOracle12cDS" journal-page-store-table=""PAGED_DATA""/> ... </server>
<server name="default">
<journal datasource="MessagingOracle12cDS" journal-page-store-table=""PAGED_DATA""/>
...
</server>
10.3.4. 관리형 도메인에서 메시징 저널 구성 링크 복사링크가 클립보드에 복사되었습니다!
메시징 저널 테이블 이름 구성에서 설명한 대로 JDBC를 사용하여 메시지를 유지하고 데이터를 데이터베이스에 바인딩할 때 여러 JBoss EAP 서버가 동일한 데이터베이스 테이블에 액세스할 수 없습니다. 관리형 도메인에서 서버 그룹의 모든 JBoss EAP 서버 인스턴스는 동일한 프로필 구성을 공유하므로 표현식을 사용하여 메시징 저널 이름 또는 데이터 소스를 구성해야 합니다.
모든 서버가 동일한 데이터베이스를 사용하여 메시징 데이터를 저장하도록 구성된 경우 테이블 이름은 각 서버 인스턴스에 고유해야 합니다. 다음은 이름의 고유한 노드 식별자를 포함하는 표현식을 사용하여 서버 그룹의 각 서버에 대해 고유한 journal-page-store-table
테이블 이름을 생성하는 관리 CLI 명령의 예입니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-page-store-table,value="${env.NODE_ID}_page_store")
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-page-store-table,value="${env.NODE_ID}_page_store")
각 서버 인스턴스가 다른 데이터베이스에 액세스하는 경우 표현식을 사용하여 각 서버의 메시징 구성이 다른 데이터 소스에 연결할 수 있습니다. 다음 관리 CLI 명령은 connection-url
에서 DB_CONNECTION_URL
환경 변수를 사용하여 다른 데이터 소스에 연결합니다.
data-source add --name=messaging-journal --jndi-name=java:jboss/datasources/messaging-journal --driver-name=oracle12c --connection-url=${env.DB_CONNECTION_URL}
data-source add --name=messaging-journal --jndi-name=java:jboss/datasources/messaging-journal --driver-name=oracle12c --connection-url=${env.DB_CONNECTION_URL}
10.3.5. 메시징 저널 네트워크 시간 제한 구성 링크 복사링크가 클립보드에 복사되었습니다!
JDBC 연결에서 요청에 응답할 때까지 대기하는 최대 시간(밀리초)을 구성할 수 있습니다. 이는 네트워크가 중단되거나 JBoss EAP 메시징과 데이터베이스 간의 연결이 중단되는 경우 어떤 이유로든 데이터베이스가 닫힙니다. 이 경우 시간 초과가 발생할 때까지 클라이언트가 차단됩니다.
journal-jdbc-network-timeout
특성을 업데이트하여 시간 초과를 구성합니다. 기본값은 20000
밀리초 또는 20
초입니다.
다음은 journal-jdbc-network-timeout
속성 값을 10000
밀리초 또는 10
초로 설정하는 관리 CLI 명령의 예입니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-jdbc-network-timeout,value=10000)
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-jdbc-network-timeout,value=10000)
10.3.6. 메시징 JDBC 지속성 스토어를 위한 HA 구성 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP messaging-activemq
하위 시스템은 브로커가 데이터베이스 저장소 유형으로 구성된 경우 JDBC HA 공유 저장소 기능을 활성화합니다. 그런 다음 브로커는 공유 데이터베이스 테이블을 사용하여 라이브 및 백업 서버가 공유 JDBC 저널 저장소를 통해 작업을 조정하는지 확인합니다.
다음 특성을 사용하여 JDBC 지속성 저장소의 HA를 구성할 수 있습니다.
-
journal-node-manager-store-table
: 노드 관리자를 저장할 JDBC 데이터베이스 테이블의 이름입니다. -
journal-jdbc-lock-expiration
: JDBC 잠금을 활성 상태로 유지하지 않고 유효한 것으로 간주되는 시간입니다. 이 특성 값을 초 단위로 지정합니다. 기본값은20
초입니다. -
journal-jdbc-lock-renew-period
: JDBC 잠금의 유지 서비스 기간. 이 특성 값을 초 단위로 지정합니다. 기본값은2
초입니다.
기본값은 서버의 ha-policy 및
특성 값에 따라 고려됩니다.
journal-
datasource
이전 버전과의 호환성을 위해 각각의 Artemis 특정 시스템 속성을 사용하여 값을 지정할 수도 있습니다.
-
brokerconfig.storeConfiguration.nodeManagerStoreTableName
-
brokerconfig.storeConfiguration.jdbcLockExpirationMillis
-
brokerconfig.storeConfiguration.jdbcLockRenewPeriodMillis
설정 시 이러한tekton별 시스템 속성이 해당 속성의 기본값보다 우선합니다.