305장. 간단한 JMS Batch 구성 요소
Camel 버전 2.16에서 사용 가능
SJMS Batch는 JMS 큐의 고성능 트랜잭션 일괄 처리를 위한 특수 구성 요소입니다. 이는 소비자 전용 구성 요소와 집계기의 하이브리드로 간주될 수 있습니다.
Camel의 일반적인 사용 사례는 집계된 상태를 다른 엔드포인트로 보내기 전에 큐의 메시지를 사용하고 집계하는 것입니다. 처리를 수행하는 시스템이 실패하는 경우 데이터가 손실되지 않도록하기 위해 일반적으로 큐에서 트랜잭션 내에서 소비되고, JDBC 구성 요소에서 발견된 것과 같은 영구 AggregationRepository
에 저장된 한 번 집계됩니다.
집계기 패턴의 동작에는 들어오는 메시지가 집계되기 전에 AggregationRepository
에서 데이터를 가져와서 나중에 결과를 다시 작성합니다. 기본적으로 집계된 아티팩트 수가 증가함에 따라 읽기 및 쓰기 시간이 점차 길어집니다. 이 문제의 영향을 보여주는 임의의 시간 단위를 사용하는 대략적인 예는 다음과 같습니다.
항목 | 읽기 시간 | 쓰기 시간 | 총 시간 |
---|---|---|---|
0 | 0 | 1 | 1 |
1 | 1 | 2 | 4 |
2 | 2 | 3 | 9 |
3 | 3 | 4 | 16 |
4 | 4 | 5 | 25 |
5 | 5 | 6 | 36 |
6 | 6 | 7 | 49 |
7 | 7 | 8 | 64 |
8 | 8 | 9 | 81 |
9 | 9 | 10 | 100 |
반면 SJMS Batch 구성 요소를 사용한 소비 성능은 선형입니다. 각 메시지는 다음 메시지를 가져오기 전에 AggregationStrategy
를 사용하여 사용하고 집계됩니다. 모든 소비 및 집계가 단일 JMS 트랜잭션에서 수행되므로 중간 상태를 유지하는 데 외부 스토리지가 필요하지 않으므로 위에서 설명한 읽기 및 쓰기 비용이 발생하지 않습니다. 실제로 이를 통해 처리량이 높은 여러 주문을 산출합니다.
완료 조건이 충족되면 첫 번째 메시지 이후 크기 또는 기간에 따라 집계된 Exchange
가 경로로 전달됩니다. 이 Exchange
의 처리 중에 예외가 발생하거나 시스템이 종료되면 원래 사용한 모든 메시지가 큐에 백업됩니다(또는 브로커 구성에 따라 dead-letter 큐에 배치됨).
일반 집계기를 사용하는 것과는 달리 집계 조건에 대한 기능이 없으므로 여러 메시지 그룹으로 사용할 수 없습니다. 소비된 모든 메시지는 단일 일괄 처리로 집계됩니다.
하나의 경로를 사용하여 병렬로 사용할 수 있는 여러 JMS 소비자 지원을 사용할 수 있으며, 동시에 JMS 메시지 그룹과 같은 기능을 사용하여 관련 메시지를 그룹화할 수 있습니다.
Maven 사용자는 이 구성 요소의 pom.xml
에 다음 종속성을 추가해야 합니다.
305.1. URI 형식 링크 복사링크가 클립보드에 복사되었습니다!
sjms:[queue:]destinationName[?options]
sjms:[queue:]destinationName[?options]
여기서 destinationName
은 JMS 큐입니다. 기본적으로 destinationName
은 큐 이름으로 해석됩니다.
sjms:FOO.BAR
sjms:FOO.BAR
원하는 경우 선택적 queue:
접두사를 포함할 수 있습니다.
sjms:queue:FOO.BAR
sjms:queue:FOO.BAR
해당 컨텍스트에서 일괄 소비를 사용하는 이점이 없기 때문에 주제 소비가 지원되지 않습니다. 주제 메시지는 일반적으로 영구적이지 않으며 손실이 허용됩니다. 트랜잭션에 실패하는 경우 브로커가 주제 메시지를 다시 제공하지 않을 수 있습니다. 일반 SJMS 소비자 끝점은 이 시나리오에서 일반 비영리적 지원 집계기와 함께 사용할 수 있습니다.