48.15. JDBC 기반 집계 리포지토리 사용
JdbcAggregationRepository
는 수집 된 메시지를 유지하는 AggregationRepository
입니다. 이렇게 하면 기본 집계자가 메모리에 AggregationRepository
만 사용하므로 메시지가 완화되지 않습니다. JdbcAggregationRepository
를 통해 Camel과 함께 Aggregator에 영구 지원을 제공할 수 있습니다.
Exchange가 성공적으로 처리된 경우에만 확인
메서드가 AggregationRepository
에서 호출될 때 발생하는 완료된 것으로 표시됩니다. 즉, 동일한 교환이 다시 실패하면 성공할 때까지 다시 시도됩니다.
옵션 maximumRedeliveries
를 사용하면 지정된 복구된 교환에 대한 최대 전송 시도 횟수를 제한할 수 있습니다. 또한 Camel이 최대Redeliveries
에 도달했을 때 교환을 보낼 위치를 알 수 있도록 deadLetterUri
옵션을 설정해야 합니다.
camel-sql 단위 테스트에서 몇 가지 예를 볼 수 있습니다(예: JdbcAggregateRecoverDeadLetterChannelTest.java
).
48.15.1. 데이터베이스 링크 복사링크가 클립보드에 복사되었습니다!
작동을 위해 각 집계기에서는 집계 및 완료의 두 테이블을 사용합니다. 규칙에 따라 완료된 집계 이름은 "_COMPLETED"
가 접미사로 지정된 집계 이름과 동일합니다. 이름은 RepositoryName
속성을 사용하여 Spring 빈에 구성해야 합니다. 다음 예제 집계가 사용됩니다.
두 테이블의 테이블 구조 정의는 동일합니다: 두 경우 모두 String 값이 키 (id)로 사용 되는 반면 Blob에는 바이트 배열에서 직렬화 된 교환이 포함 되어 있습니다.
그러나 한 가지 차이점이 있어야 합니다. id 필드에는 테이블에 따라 동일한 콘텐츠가 없습니다.
집계 테이블 ID에는 메시지를 집계하기 위해 구성 요소에서 사용하는 상관 관계 Id가 있습니다. 완료된 테이블에서 id 는 해당 Blob 필드에 저장된 교환의 ID를 보유합니다.
다음은 테이블을 만드는 데 사용되는 SQL 쿼리입니다. "aggregation"
을 수집기 리포지토리 이름으로 교체합니다.