325.13. JDBC 기반 멱등 리포지토리 사용

Camel 2.7부터 사용 가능: 이 섹션에서는 JDBC 기반 멱등 리포지토리를 사용합니다.

TIP:*Abstract 클래스* From Camel 2.9에서 사용 중인 추상 클래스 org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository 을 사용하면 사용자 정의 JDBC 멱등 리포지토리를 빌드할 수 있습니다.

먼저 멱등 리포지토리에서 사용할 데이터베이스 테이블을 만들어야 합니다. 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 유형은 고정 길이의 바이너리 문자열입니다. DATE,TIME 또는 TIMESTAMP 의 JDBC 시간 유형에 매핑되지 않습니다.

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해야 합니다.It must throw an exception to indicate the table doesn't exist.

createString

CREATE TABLE CAMEL_MESSAGEPROCESSED(프로세서 이름 VARCHAR(255), messageId VARCHAR(100),At TIMESTAMP)

테이블을 만드는 데 사용되는 문입니다.

queryString

SELECT COUNT(*) FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ? AND messageId = ?

메시지가 이미 있는지 확인하는 데 사용되는 쿼리입니다(결과는 '0'과 동일함). 두 개의 매개 변수를 사용합니다. 첫 번째는 프로세서 이름(문자열)이고 두 번째는 메시지 ID(문자열)입니다.

insertString

INSERT INTO CAMEL_MESSAGEPROCESSED (프로세서 이름, messageId, createdAt) VALUES(?, ?)

항목을 테이블에 추가하는 데 사용되는 문입니다. 세 개의 매개 변수를 사용합니다. 첫 번째는 프로세서 이름(문자열)이고, 두 번째는 메시지 id(문자열)이고 세 번째는 이 항목이 리포지토리에 추가될 때 타임스탬프(java.sql.Timestamp)입니다.

deleteString

DELETE FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ? AND messageId = ?

데이터베이스에서 항목을 삭제하는 데 사용되는 문입니다. 두 개의 매개 변수를 사용합니다. 첫 번째는 프로세서 이름(문자열)이고 두 번째는 메시지 ID(문자열)입니다.