326.13. JDBC 기반 idempotent 리포지토리 사용
Camel 2.7부터 사용 가능: 이 섹션에서는 JDBC 기반 idempotent 리포지토리를 사용합니다.
TIP:*Abstract 클래스* Camel 2.9 이후부터는 사용자 정의 JDBC idempotent 리포지토리를 빌드하도록 확장할 수 있는 추상 클래스 org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository
가 있습니다.
먼저 idempotent 리포지토리에서 사용할 데이터베이스 테이블을 만들어야 합니다. Camel 2.7 의 경우 다음 스키마를 사용합니다.
CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255), messageId VARCHAR(100) )
Camel 2.8 에서는 createdAt 열을 추가했습니다.
CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255), messageId VARCHAR(100), createdAt TIMESTAMP )
경고: SQL Server TIMESTAMP 유형은 고정 길이의 바이너리 문자열 유형입니다. JDBC 시간 유형: TIME ,TIME 또는 TIMESTAMP 에 매핑되지 않습니다.
JdbcMessageIdRepository 사용자 지정
Camel 2.9.1 부터 org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository
를 조정할 수 있는 몇 가지 옵션이 있습니다.
매개변수 | 기본값 | 설명 |
---|---|---|
createTableIfNotExists | true | Camel이 없는 경우 테이블을 만들려고 하는지 여부를 정의합니다. |
tableExistsString | SELECT 1 FROM CAMEL_MESSAGEPROCESSED WHERE 1 = 0 | 이 쿼리는 테이블이 이미 있는지 여부를 확인하는 데 사용됩니다. 테이블이 존재하지 않음을 나타내기 위해 예외를 throw해야 합니다. |
createString | CREATE Cryostat CAMEL_MESSAGEPROCESSED (processorName VARCHAR(255), messageId VARCHAR(100), createdAt TIMESTAMP) | 테이블을 만드는 데 사용되는 문입니다. |
queryString | COUNT(*) FROM CAMEL_MESSAGEPROCESSED Cryostat processorName = ? AND messageId = ? |
메시지가 리포지토리에 이미 있는지 확인하는 데 사용되는 쿼리입니다( 결과가 '0'과 같지 않음). 두 개의 매개 변수가 필요합니다. 첫 번째는 프로세서 이름( |
insertString | Cryostat INTO CAMEL_MESSAGEPROCESSED (processorName, messageId, createdAt) VALUES (?, ?) |
항목을 테이블에 추가하는 데 사용되는 문입니다. 세 개의 매개 변수가 필요합니다. 첫 번째는 프로세서 이름( |
deleteString | DELETE FROM CAMEL_MESSAGEPROCESSED Cryostat processorName = ? AND messageId = ? |
데이터베이스에서 항목을 삭제하는 데 사용되는 문입니다. 두 개의 매개 변수가 필요합니다. 첫 번째는 프로세서 이름( |