AWS SQS 연동
AWS2 SQS 컴포넌트는 Amazon SQS(큐 서비스)에 메시지를 보내고 받을 수 있게 해 줘요. Camel 3.1부터 제공됐고, producer와 consumer를 모두 지원합니다. 큐가 없으면 자동으로 만들 수 있고, 배치 전송·지연 큐·FIFO 중복 제거 전략·JMS 스타일 셀렉터 대체 같은 기능도 옵션으로 챙길 수 있어요.
출처: 문서
본문
Camel 3.1부터 지원
producer와 consumer 모두 지원
AWS2 SQS 컴포넌트는 Amazon의 SQS 서비스에 메시지를 보내고 받을 수 있게 지원해요.
사전 준비 사항
유효한 Amazon Web Services 개발자 계정이 있고 Amazon SQS를 사용하도록 가입되어 있어야 해요. 자세한 내용은 Amazon SQS에서 확인할 수 있어요.
URI format
aws2-sqs://queueNameOrArn[?options]
큐가 아직 없으면 큐를 만들어요.
쿼리 옵션은 다음 형식으로 URI 뒤에 붙일 수 있어요:
?options=value&option2=value&…
옵션 설정 방법
Camel 컴포넌트는 두 단계로 나눠 설정합니다:
-
컴포넌트(component) 레벨
-
엔드포인트(endpoint) 레벨
컴포넌트 옵션 설정
컴포넌트 레벨에서는 엔드포인트들이 물려받는 공통·일반 설정을 정해요. 설정 계층 중 가장 위에 해당합니다.
예를 들어 컴포넌트에는 보안 설정, 인증용 자격 증명, 네트워크 연결 URL 같은 것들이 들어갑니다.
컴포넌트마다 옵션이 몇 개뿐인 경우도 있고 많은 경우도 있어요. 컴포넌트는 보통 널리 쓰는 기본값을 이미 갖고 있어서, 옵션을 몇 개만 설정하거나 아예 안 건드려도 되는 경우가 많죠.
컴포넌트 설정 방법은 이렇게 있어요:
-
설정 파일(
application.properties,*.yaml파일 등). -
Java 코드에서 직접.
엔드포인트 옵션 설정
엔드포인트는 옵션이 많아서 설정에 시간을 더 쓰게 됩니다. 이 옵션들로 엔드포인트가 어떻게 동작할지 원하는 대로 조정할 수 있어요. 옵션은 엔드포인트를 consumer(from)로 쓰는지, producer(to)로 쓰는지, 둘 다 쓰는지에 따라 나눠집니다.
엔드포인트 설정은 보통 엔드포인트 URI에 _path_와 query 파라미터로 직접 하는 경우가 많아요. Java에서 엔드포인트와 데이터 포맷을 _타입 세이프_하게 설정하려면 Endpoint DSL과 DataFormat DSL을 쓸 수도 있습니다.
옵션 설정 시 좋은 습관은 프로퍼티 플레이스홀더를 쓰는 거예요.
플레이스홀더를 쓰면 좋은 점은:
-
URL, 포트 번호, 민감한 정보 등을 코드에 하드코딩하는 걸 막아줘요.
-
설정을 코드 밖으로 분리할 수 있어요.
-
코드가 더 유연해지고 재사용하기 좋아집니다.
아래 두 섹션에서 모든 옵션을 컴포넌트 먼저, 그다음 엔드포인트 순으로 나열해요.
컴포넌트 옵션
AWS SQS(Simple Queue Service) 컴포넌트가 지원하는 옵션은 아래와 같아요.
| Name | Description | Default | Type |
|---|---|---|---|
| amazonAWSHost (common) | Amazon AWS 클라우드의 호스트 이름이에요. | amazonaws.com | String |
| autoCreateQueue (common) | 큐 자동 생성을 설정해요. | false | boolean |
| configuration (common) | AWS SQS 기본 설정이에요. | Sqs2Configuration | |
| overrideEndpoint (common) | 엔드포인트를 재정의(override)할지 설정해요. 이 옵션은 uriEndpointOverride 옵션과 조합해서 써야 해요. | false | boolean |
| protocol (common) | SQS와 통신할 때 쓰는 하위 프로토콜이에요. | https | String |
| queueOwnerAWSAccountId (common) | 다른 계정 소유자의 큐에 연결해야 할 때 큐 소유자의 AWS 계정 ID를 지정해요. | String | |
| region (common) |
SQS 클라이언트가 동작할 리전이에요. 이 파라미터를 쓸 때는 설정이 리전의 소문자 이름(예: ap-east-1)을 기대해요. Region.EU_WEST_1.id() 형태의 이름을 사용해야 해요.
Enum values:
-
ap-south-2
-
ap-south-1
-
eu-south-1
-
eu-south-2
-
us-gov-east-1
-
me-central-1
-
il-central-1
-
ca-central-1
-
eu-central-1
-
us-iso-west-1
-
eu-central-2
-
eu-isoe-west-1
-
us-west-1
-
us-west-2
-
af-south-1
-
eu-north-1
-
eu-west-3
-
eu-west-2
-
eu-west-1
-
ap-northeast-3
-
ap-northeast-2
-
ap-northeast-1
-
me-south-1
-
sa-east-1
-
ap-east-1
-
cn-north-1
-
ca-west-1
-
us-gov-west-1
-
ap-southeast-1
-
ap-southeast-2
-
us-iso-east-1
-
ap-southeast-3
-
ap-southeast-4
-
us-east-1
-
us-east-2
-
cn-northwest-1
-
us-isob-east-1
-
aws-global
-
aws-cn-global
-
aws-us-gov-global
-
aws-iso-global
-
aws-iso-b-global
| | String | | uriEndpointOverride (common) | 재정의할 URI 엔드포인트를 설정해요. 이 옵션은 overrideEndpoint 옵션과 조합해서 써야 해요. | | String | | attributeNames (consumer) | 컨슈밍할 때 받을 속성(attribute) 이름 목록이에요. 여러 이름은 콤마로 구분할 수 있어요. | | String | | bridgeErrorHandler (consumer) | 컨슈머를 Camel 라우팅 에러 핸들러(Error Handler)에 브리지할 수 있게 해 줘요. 즉, Camel 컨슈머가 들어오는 메시지를 집어 올리는 동안 등에서 예외가 발생하면(가능한 경우), 그 예외를 메시지로 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 이것은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있도록 허용하는 경우에만 가능해요. 일부 컴포넌트는 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본으로 컨슈머는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. | false | boolean | | concurrentConsumers (consumer) | 여러 스레드로 SQS 큐를 폴링해서 처리량을 늘릴 수 있게 해 줘요. | 1 | int | | concurrentRequestLimit (consumer) | 단일 컨슈머 폴링에서 AWS로 보낼 수 있는 동시 receive 요청의 최대 개수예요. | 50 | int | | defaultVisibilityTimeout (consumer) | 기본 visibility timeout(초)이에요. | | Integer | | deleteAfterRead (consumer) | 메시지를 읽은 후 SQS에서 삭제해요. | true | boolean | | deleteIfFiltered (consumer) | exchange에 Sqs2Constants#SQS_DELETE_FILTERED(CamelAwsSqsDeleteFiltered) 키의 프로퍼티가 true로 설정되어 있을 때 SQS 큐에 DeleteMessage를 보낼지 여부예요. | true | boolean | | extendMessageVisibility (consumer) | 켜면 예약된 백그라운드 태스크가 SQS에서 메시지 가시성(visibility)을 계속 연장해요. 메시지 처리가 오래 걸릴 때 필요해요. true로 설정하면 defaultVisibilityTimeout을 반드시 설정해야 해요. 자세한 내용은 Amazon 문서를 보세요. | false | boolean | | kmsDataKeyReusePeriodSeconds (consumer) | Amazon SQS가 AWS KMS를 다시 호출하기 전까지 데이터 키를 재사용해 메시지를 암호화·복호화할 수 있는 시간(초)이에요. 60초(1분)부터 86,400초(24시간) 사이의 정수예요. 기본값: 300(5분). | | Integer | | kmsMasterKeyId (consumer) | Amazon SQS용 AWS 관리형 고객 마스터 키(CMK) 또는 커스텀 CMK의 ID예요. | | String | | messageAttributeNames (consumer) | 컨슈밍할 때 받을 메시지 속성(message attribute) 이름 목록이에요. 여러 이름은 콤마로 구분할 수 있어요. | | String | | serverSideEncryptionEnabled (consumer) | 큐에서 서버 사이드 암호화(Server Side Encryption)를 켤지 정의해요. | false | boolean | | sortAttributeName (consumer) | 메시지를 정렬할 때 쓰는 메시지 속성의 이름이에요. 지정하면 컨슈머가 폴링한 메시지가 이 속성 기준으로 정렬돼요. maxMessagesPerPoll 파라미터를 10을 넘게 설정할 때 중요할 수 있어요. 그런 경우 메시지가 동시에 가져와져서 순서가 보장되지 않거든요. | | String | | visibilityTimeout (consumer) | ReceiveMessage 요청으로 메시지를 가져온 뒤 com.amazonaws.services.sqs.model.SetQueueAttributesRequest에 설정할, 후속 조회 요청으로부터 메시지를 숨겨 두는 시간(초)이에요. defaultVisibilityTimeout와 다를 때만 의미가 있어요. 큐의 visibility timeout 속성을 영구적으로 바꿔요. | | Integer | | waitTimeSeconds (consumer) | ReceiveMessage 액션 호출이 응답에 넣을 메시지가 큐에 들어올 때까지 기다리는 시간(0~20초)이에요. | | Integer | | batchSeparator (producer) | sendBatchMessage 연산에 String을 넘길 때 쓸 구분자를 설정해요. | , | String | | delaySeconds (producer) | 메시지 전송을 몇 초 지연할지 설정해요. | | Integer | | lazyStartProducer (producer) | 프로듀서를 느리게(lazy, 첫 메시지가 올 때) 시작할지 여부예요. 느리게 시작하면, 프로듀서가 시작 중에 실패해서 라우트 시작 자체가 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있어요. 시작을 늦춰 두면 실패가 발생했을 때 메시지를 라우팅하는 동안 Camel의 라우팅 에러 핸들러로 처리할 수 있죠. 단, 첫 메시지를 처리할 때 프로듀서를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 감안하세요. | false | boolean | | messageDeduplicationIdStrategy (producer) |
FIFO 큐 전용이에요. 메시지에 messageDeduplicationId를 설정하는 전략이에요. useExchangeId, useContentBasedDeduplication 중 하나를 고를 수 있어요. useContentBasedDeduplication을 고르면 메시지에 messageDeduplicationId가 설정되지 않아요.
Enum values:
-
useExchangeId
-
useContentBasedDeduplication
| useExchangeId | String | | messageGroupIdStrategy (producer) |
FIFO 큐 전용이에요. 메시지에 messageGroupId를 설정하는 전략이에요. useConstant, useExchangeId, usePropertyValue 중 하나를 고를 수 있어요. usePropertyValue를 고르면 CamelAwsMessageGroupId 프로퍼티 값이 사용돼요.
Enum values:
-
useConstant
-
useExchangeId
-
usePropertyValue
| | String | | messageHeaderExceededLimit (producer) |
AWS SQS로 보내는 메시지가 AWS 허용치를 넘었을 때(현재는 메시지 헤더 최대 10개만 허용) 어떻게 할지 정해요. WARN은 초과 헤더마다 한도에 걸렸다는 WARN 로그를 남기고 메시지를 AWS로 보내요. WARN_ONCE는 한도에 걸렸다는 WARN을 한 번만 로그로 남기고 추가 헤더를 버려서 메시지를 보낼 수 있게 해요. IGNORE는 로그 없이 조용히 추가 헤더를 버려서 메시지를 보내요. FAIL은 예외를 던지고 메시지를 AWS로 보내지 않아요.
Enum values:
-
WARN
-
WARN_ONCE
-
IGNORE
-
FAIL
| WARN | String | | operation (producer) |
사용자가 메시지 전송만 하려는 게 아닐 때 수행할 연산이에요.
Enum values:
-
sendBatchMessage
-
deleteMessage
-
listQueues
-
purgeQueue
-
deleteQueue
| | Sqs2Operations | | amazonSQSClient (advanced) | Autowired 사용할 AmazonSQS 클라이언트예요. | | SqsClient | | autowiredEnabled (advanced) | 오토와이어링(autowiring)을 활성화할지 여부예요. 레지스트리에서 일치하는 타입의 인스턴스가 딱 하나 있는지 찾아서, 그 인스턴스로 오토와이어링 옵션(옵션이 autowired로 표시되어 있어야 함)을 자동 설정하는 데 쓰여요. JDBC 데이터 소스, JMS 커넥션 팩토리, AWS 클라이언트 등을 자동 설정할 때 사용할 수 있어요. | true | boolean | | delayQueue (advanced) | delaySeconds 옵션을 큐에 적용할지, 단일 메시지에 적용할지 정의해요. | false | boolean | | healthCheckConsumerEnabled (health) | 이 컴포넌트의 컨슈머 기반 헬스 체크를 모두 켜거나 끄는 데 사용해요. | true | boolean | | healthCheckProducerEnabled (health) | 이 컴포넌트의 프로듀서 기반 헬스 체크를 모두 켜거나 끄는 데 사용해요. 참고: Camel은 기본으로 프로듀서 기반 헬스 체크를 모두 비활성화해요. camel.health.producersEnabled=true로 설정하면 프로듀서 체크를 전역으로 켤 수 있어요. | true | boolean | | proxyHost (proxy) | SQS 클라이언트를 만들 때 프록시 호스트를 정의해요. | | String | | proxyPort (proxy) | SQS 클라이언트를 만들 때 프록시 포트를 정의해요. | | Integer | | proxyProtocol (proxy) |
SQS 클라이언트를 만들 때 사용할 프록시 프로토콜을 정의해요.
Enum values:
-
HTTP
-
HTTPS
| HTTPS | Protocol | | maximumMessageSize (queue) | 이 큐의 SQS 메시지가 담을 수 있는 maximumMessageSize(바이트)예요. | | Integer | | messageRetentionPeriod (queue) | SQS가 이 큐의 메시지를 보관하는 messageRetentionPeriod(초)예요. | | Integer | | policy (queue) | 이 큐의 정책이에요. 기본으로 classpath에서 불러오지만, classpath:, file:, http: 접두사를 붙여 다른 시스템에서 리소스를 불러올 수도 있어요. | | String | | queueUrl (queue) | queueUrl을 명시적으로 정의해요. queueUrl에 영향을 줄 수 있는 다른 모든 파라미터는 무시돼요. 이 파라미터는 테스트 목적으로 SQS의 목(mock) 구현에 연결할 때 쓰려는 거예요. | | String | | receiveMessageWaitTimeSeconds (queue) | 요청에서 WaitTimeSeconds를 지정하지 않으면, 큐 속성 ReceiveMessageWaitTimeSeconds가 얼마나 기다릴지 결정하는 데 쓰여요. | | Integer | | redrivePolicy (queue) | 메시지를 데드레터(DeadLetter) 큐로 보내는 정책을 지정해요. 자세한 내용은 Amazon 문서를 보세요. | | String | | accessKey (security) | Amazon AWS 액세스 키예요. | | String | | profileCredentialsName (security) | 프로필 자격 증명 프로바이더를 사용할 때 이 파라미터가 프로필 이름을 설정해요. | | String | | secretKey (security) | Amazon AWS 시크릿 키예요. | | String | | sessionToken (security) | 사용자가 IAM 역할을 수행(assume)해야 할 때 쓰이는 Amazon AWS 세션 토큰이에요. | | String | | trustAllCertificates (security) | 엔드포인트를 재정의할 때 모든 인증서를 신뢰하고 싶은 경우 사용해요. | false | boolean | | useDefaultCredentialsProvider (security) | SQS 클라이언트가 AWS 인프라 인스턴스에서 자격 증명을 불러올지, 아니면 정적 자격 증명이 넘겨지길 기대할지 설정해요. | false | boolean | | useProfileCredentialsProvider (security) | SQS 클라이언트가 프로필 자격 증명 프로바이더를 통해 자격 증명을 불러올지 설정해요. | false | boolean | | useSessionCredentials (security) | SQS 클라이언트가 세션 자격 증명(Session Credentials)을 사용할지 설정해요. SQS 연산을 위해 IAM 역할을 수행해야 하는 상황에서 유용해요. | false | boolean |
엔드포인트 옵션
AWS SQS(Simple Queue Service) 엔드포인트는 다음 URI 문법으로 설정해요:
aws2-sqs:queueNameOrArn
다음 _path_와 query 파라미터를 씁니다:
Path 파라미터
| Name | Description | Default | Type |
|---|---|---|---|
| queueNameOrArn (common) | 필수 큐 이름 또는 ARN. | String |
Query 파라미터
| Name | Description | Default | Type |
|---|---|---|---|
| amazonAWSHost (common) | Amazon AWS 클라우드의 호스트 이름이에요. | amazonaws.com | String |
| autoCreateQueue (common) | 큐 자동 생성을 설정해요. | false | boolean |
| headerFilterStrategy (common) | 헤더를 Camel과 주고받을 때 매핑하는 커스텀 HeaderFilterStrategy를 사용해요. | HeaderFilterStrategy | |
| overrideEndpoint (common) | 엔드포인트를 재정의(override)할지 설정해요. 이 옵션은 uriEndpointOverride 옵션과 조합해서 써야 해요. | false | boolean |
| protocol (common) | SQS와 통신할 때 쓰는 하위 프로토콜이에요. | https | String |
| queueOwnerAWSAccountId (common) | 다른 계정 소유자의 큐에 연결해야 할 때 큐 소유자의 AWS 계정 ID를 지정해요. | String | |
| region (common) |
SQS 클라이언트가 동작할 리전이에요. 이 파라미터를 쓸 때는 설정이 리전의 소문자 이름(예: ap-east-1)을 기대해요. Region.EU_WEST_1.id() 형태의 이름을 사용해야 해요.
Enum values:
-
ap-south-2
-
ap-south-1
-
eu-south-1
-
eu-south-2
-
us-gov-east-1
-
me-central-1
-
il-central-1
-
ca-central-1
-
eu-central-1
-
us-iso-west-1
-
eu-central-2
-
eu-isoe-west-1
-
us-west-1
-
us-west-2
-
af-south-1
-
eu-north-1
-
eu-west-3
-
eu-west-2
-
eu-west-1
-
ap-northeast-3
-
ap-northeast-2
-
ap-northeast-1
-
me-south-1
-
sa-east-1
-
ap-east-1
-
cn-north-1
-
ca-west-1
-
us-gov-west-1
-
ap-southeast-1
-
ap-southeast-2
-
us-iso-east-1
-
ap-southeast-3
-
ap-southeast-4
-
us-east-1
-
us-east-2
-
cn-northwest-1
-
us-isob-east-1
-
aws-global
-
aws-cn-global
-
aws-us-gov-global
-
aws-iso-global
-
aws-iso-b-global
| | String | | uriEndpointOverride (common) | 재정의할 URI 엔드포인트를 설정해요. 이 옵션은 overrideEndpoint 옵션과 조합해서 써야 해요. | | String | | attributeNames (consumer) | 컨슈밍할 때 받을 속성(attribute) 이름 목록이에요. 여러 이름은 콤마로 구분할 수 있어요. | | String | | concurrentConsumers (consumer) | 여러 스레드로 SQS 큐를 폴링해서 처리량을 늘릴 수 있게 해 줘요. | 1 | int | | concurrentRequestLimit (consumer) | 단일 컨슈머 폴링에서 AWS로 보낼 수 있는 동시 receive 요청의 최대 개수예요. | 50 | int | | defaultVisibilityTimeout (consumer) | 기본 visibility timeout(초)이에요. | | Integer | | deleteAfterRead (consumer) | 메시지를 읽은 후 SQS에서 삭제해요. | true | boolean | | deleteIfFiltered (consumer) | exchange에 Sqs2Constants#SQS_DELETE_FILTERED(CamelAwsSqsDeleteFiltered) 키의 프로퍼티가 true로 설정되어 있을 때 SQS 큐에 DeleteMessage를 보낼지 여부예요. | true | boolean | | extendMessageVisibility (consumer) | 켜면 예약된 백그라운드 태스크가 SQS에서 메시지 가시성(visibility)을 계속 연장해요. 메시지 처리가 오래 걸릴 때 필요해요. true로 설정하면 defaultVisibilityTimeout을 반드시 설정해야 해요. 자세한 내용은 Amazon 문서를 보세요. | false | boolean | | kmsDataKeyReusePeriodSeconds (consumer) | Amazon SQS가 AWS KMS를 다시 호출하기 전까지 데이터 키를 재사용해 메시지를 암호화·복호화할 수 있는 시간(초)이에요. 60초(1분)부터 86,400초(24시간) 사이의 정수예요. 기본값: 300(5분). | | Integer | | kmsMasterKeyId (consumer) | Amazon SQS용 AWS 관리형 고객 마스터 키(CMK) 또는 커스텀 CMK의 ID예요. | | String | | maxMessagesPerPoll (consumer) | 각 폴링에서 폴링할 메시지의 최대 개수를 제한으로 가져요. 기본은 무제한이지만, 0이나 음수를 쓰면 무제한으로 비활성화할 수 있어요. | | int | | messageAttributeNames (consumer) | 컨슈밍할 때 받을 메시지 속성(message attribute) 이름 목록이에요. 여러 이름은 콤마로 구분할 수 있어요. | | String | | sendEmptyMessageWhenIdle (consumer) | 폴링 컨슈머가 아무 파일도 폴링하지 못했을 때, 이 옵션을 켜면 대신 빈 메시지(본문 없음)를 보내요. | false | boolean | | serverSideEncryptionEnabled (consumer) | 큐에서 서버 사이드 암호화(Server Side Encryption)를 켤지 정의해요. | false | boolean | | sortAttributeName (consumer) | 메시지를 정렬할 때 쓰는 메시지 속성의 이름이에요. 지정하면 컨슈머가 폴링한 메시지가 이 속성 기준으로 정렬돼요. maxMessagesPerPoll 파라미터를 10을 넘게 설정할 때 중요할 수 있어요. 그런 경우 메시지가 동시에 가져와져서 순서가 보장되지 않거든요. | | String | | visibilityTimeout (consumer) | ReceiveMessage 요청으로 메시지를 가져온 뒤 com.amazonaws.services.sqs.model.SetQueueAttributesRequest에 설정할, 후속 조회 요청으로부터 메시지를 숨겨 두는 시간(초)이에요. defaultVisibilityTimeout와 다를 때만 의미가 있어요. 큐의 visibility timeout 속성을 영구적으로 바꿔요. | | Integer | | waitTimeSeconds (consumer) | ReceiveMessage 액션 호출이 응답에 넣을 메시지가 큐에 들어올 때까지 기다리는 시간(0~20초)이에요. | | Integer | | bridgeErrorHandler (consumer (advanced)) | 컨슈머를 Camel 라우팅 에러 핸들러(Error Handler)에 브리지할 수 있게 해 줘요. 즉, Camel 컨슈머가 들어오는 메시지를 집어 올리는 동안 등에서 예외가 발생하면(가능한 경우), 그 예외를 메시지로 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 이것은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있도록 허용하는 경우에만 가능해요. 일부 컴포넌트는 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본으로 컨슈머는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. | false | boolean | | exceptionHandler (consumer (advanced)) | 컨슈머가 커스텀 ExceptionHandler를 쓰게 할 수 있어요. bridgeErrorHandler 옵션이 활성화되어 있으면 이 옵션은 사용되지 않는다는 점에 주의하세요. 기본으로 컨슈머는 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. | | ExceptionHandler | | exchangePattern (consumer (advanced)) |
컨슈머가 교환(exchange)을 만들 때 교환 패턴을 설정해요.
Enum values:
-
InOnly
-
InOut
| | ExchangePattern | | pollStrategy (consumer (advanced)) | 플러그형 org.apache.camel.PollingConsumerPollingStrategy예요. Exchange가 만들어져 Camel에서 라우팅되기 전에 폴링 작업 중에 보통 발생하는 에러 처리를 제어하는 커스텀 구현을 제공할 수 있어요. | | PollingConsumerPollStrategy | | batchSeparator (producer) | sendBatchMessage 연산에 String을 넘길 때 쓸 구분자를 설정해요. | , | String | | delaySeconds (producer) | 메시지 전송을 몇 초 지연할지 설정해요. | | Integer | | messageDeduplicationIdStrategy (producer) |
FIFO 큐 전용이에요. 메시지에 messageDeduplicationId를 설정하는 전략이에요. useExchangeId, useContentBasedDeduplication 중 하나를 고를 수 있어요. useContentBasedDeduplication을 고르면 메시지에 messageDeduplicationId가 설정되지 않아요.
Enum values:
-
useExchangeId
-
useContentBasedDeduplication
| useExchangeId | String | | messageGroupIdStrategy (producer) |
FIFO 큐 전용이에요. 메시지에 messageGroupId를 설정하는 전략이에요. useConstant, useExchangeId, usePropertyValue 중 하나를 고를 수 있어요. usePropertyValue를 고르면 CamelAwsMessageGroupId 프로퍼티 값이 사용돼요.
Enum values:
-
useConstant
-
useExchangeId
-
usePropertyValue
| | String | | messageHeaderExceededLimit (producer) |
AWS SQS로 보내는 메시지가 AWS 허용치를 넘었을 때(현재는 메시지 헤더 최대 10개만 허용) 어떻게 할지 정해요. WARN은 초과 헤더마다 한도에 걸렸다는 WARN 로그를 남기고 메시지를 AWS로 보내요. WARN_ONCE는 한도에 걸렸다는 WARN을 한 번만 로그로 남기고 추가 헤더를 버려서 메시지를 보낼 수 있게 해요. IGNORE는 로그 없이 조용히 추가 헤더를 버려서 메시지를 보내요. FAIL은 예외를 던지고 메시지를 AWS로 보내지 않아요.
Enum values:
-
WARN
-
WARN_ONCE
-
IGNORE
-
FAIL
| WARN | String | | operation (producer) |
사용자가 메시지 전송만 하려는 게 아닐 때 수행할 연산이에요.
Enum values:
-
sendBatchMessage
-
deleteMessage
-
listQueues
-
purgeQueue
-
deleteQueue
| | Sqs2Operations | | lazyStartProducer (producer (advanced)) | 프로듀서를 느리게(lazy, 첫 메시지가 올 때) 시작할지 여부예요. 느리게 시작하면, 프로듀서가 시작 중에 실패해서 라우트 시작 자체가 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있어요. 시작을 늦춰 두면 실패가 발생했을 때 메시지를 라우팅하는 동안 Camel의 라우팅 에러 핸들러로 처리할 수 있죠. 단, 첫 메시지를 처리할 때 프로듀서를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 감안하세요. | false | boolean | | amazonSQSClient (advanced) | Autowired 사용할 AmazonSQS 클라이언트예요. | | SqsClient | | delayQueue (advanced) | delaySeconds 옵션을 큐에 적용할지, 단일 메시지에 적용할지 정의해요. | false | boolean | | proxyHost (proxy) | SQS 클라이언트를 만들 때 프록시 호스트를 정의해요. | | String | | proxyPort (proxy) | SQS 클라이언트를 만들 때 프록시 포트를 정의해요. | | Integer | | proxyProtocol (proxy) |
SQS 클라이언트를 만들 때 사용할 프록시 프로토콜을 정의해요.
Enum values:
-
HTTP
-
HTTPS
| HTTPS | Protocol | | maximumMessageSize (queue) | 이 큐의 SQS 메시지가 담을 수 있는 maximumMessageSize(바이트)예요. | | Integer | | messageRetentionPeriod (queue) | SQS가 이 큐의 메시지를 보관하는 messageRetentionPeriod(초)예요. | | Integer | | policy (queue) | 이 큐의 정책이에요. 기본으로 classpath에서 불러오지만, classpath:, file:, http: 접두사를 붙여 다른 시스템에서 리소스를 불러올 수도 있어요. | | String | | queueUrl (queue) | queueUrl을 명시적으로 정의해요. queueUrl에 영향을 줄 수 있는 다른 모든 파라미터는 무시돼요. 이 파라미터는 테스트 목적으로 SQS의 목(mock) 구현에 연결할 때 쓰려는 거예요. | | String | | receiveMessageWaitTimeSeconds (queue) | 요청에서 WaitTimeSeconds를 지정하지 않으면, 큐 속성 ReceiveMessageWaitTimeSeconds가 얼마나 기다릴지 결정하는 데 쓰여요. | | Integer | | redrivePolicy (queue) | 메시지를 데드레터(DeadLetter) 큐로 보내는 정책을 지정해요. 자세한 내용은 Amazon 문서를 보세요. | | String | | backoffErrorThreshold (scheduler) | backoffMultipler가 작동하기 전에 연속으로 발생해야 하는 에러 폴링(오류로 실패한 폴링) 횟수예요. | | int | | backoffIdleThreshold (scheduler) | backoffMultipler가 작동하기 전에 연속으로 발생해야 하는 유휴(idle) 폴링 횟수예요. | | int | | backoffMultiplier (scheduler) | 연속으로 유휴/에러 폴링이 여러 번 이어졌을 때 예약 폴링 컨슈머가 백오프하도록 해요. 이 배수는 다음 실제 시도가 다시 일어나기 전에 건너뛸 폴링 횟수예요. 이 옵션을 쓰면 backoffIdleThreshold 및/또는 backoffErrorThreshold도 함께 설정해야 해요. | | int | | delay (scheduler) | 다음 폴링 전까지의 밀리초예요. | 500 | long | | greedy (scheduler) | greedy를 켜면 이전 실행이 메시지를 1개 이상 폴링했을 때 ScheduledPollConsumer가 바로 다시 실행돼요. | false | boolean | | initialDelay (scheduler) | 첫 폴링이 시작되기 전까지의 밀리초예요. | 1000 | long | | repeatCount (scheduler) | 발동(fire) 횟수의 최대 한도를 지정해요. 1로 설정하면 스케줄러가 한 번만 발동하고, 5로 설정하면 다섯 번만 발동해요. 0이나 음수는 계속 발동한다는 뜻이에요. | 0 | long | | runLoggingLevel (scheduler) |
컨슈머가 폴링할 때 시작/완료 로그 한 줄을 남겨요. 이 옵션으로 그 로그의 레벨을 설정할 수 있어요.
Enum values:
-
TRACE
-
DEBUG
-
INFO
-
WARN
-
ERROR
-
OFF
| TRACE | LoggingLevel | | scheduledExecutorService (scheduler) | 컨슈머가 사용할 커스텀/공유 스레드 풀을 설정할 수 있게 해 줘요. 기본으로 각 컨슈머는 자기만의 단일 스레드 풀을 가져요. | | ScheduledExecutorService | | scheduler (scheduler) | camel-spring이나 camel-quartz 컴포넌트의 cron 스케줄러를 사용해요. 내장 스케줄러는 값으로 spring 또는 quartz를 쓰세요. | none | Object | | schedulerProperties (scheduler) | 커스텀 스케줄러나 Quartz, Spring 기반 스케줄러를 사용할 때 추가 프로퍼티를 설정해요. scheduler. 접두사가 붙은 다중 값 옵션이에요. | | Map | | startScheduler (scheduler) | 스케줄러를 자동으로 시작할지 여부예요. | true | boolean | | timeUnit (scheduler) |
initialDelay와 delay 옵션의 시간 단위예요.
Enum values:
-
NANOSECONDS
-
MICROSECONDS
-
MILLISECONDS
-
SECONDS
-
MINUTES
-
HOURS
-
DAYS
| MILLISECONDS | TimeUnit | | useFixedDelay (scheduler) | 고정 지연(fixed delay)을 쓸지 고정 비율(fixed rate)을 쓸지 제어해요. 자세한 내용은 JDK의 ScheduledExecutorService를 보세요. | true | boolean | | accessKey (security) | Amazon AWS 액세스 키예요. | | String | | profileCredentialsName (security) | 프로필 자격 증명 프로바이더를 사용할 때 이 파라미터가 프로필 이름을 설정해요. | | String | | secretKey (security) | Amazon AWS 시크릿 키예요. | | String | | sessionToken (security) | 사용자가 IAM 역할을 수행(assume)해야 할 때 쓰이는 Amazon AWS 세션 토큰이에요. | | String | | trustAllCertificates (security) | 엔드포인트를 재정의할 때 모든 인증서를 신뢰하고 싶은 경우 사용해요. | false | boolean | | useDefaultCredentialsProvider (security) | SQS 클라이언트가 AWS 인프라 인스턴스에서 자격 증명을 불러올지, 아니면 정적 자격 증명이 넘겨지길 기대할지 설정해요. | false | boolean | | useProfileCredentialsProvider (security) | SQS 클라이언트가 프로필 자격 증명 프로바이더를 통해 자격 증명을 불러올지 설정해요. | false | boolean | | useSessionCredentials (security) | SQS 클라이언트가 세션 자격 증명(Session Credentials)을 사용할지 설정해요. SQS 연산을 위해 IAM 역할을 수행해야 하는 상황에서 유용해요. | false | boolean |
메시지 헤더
AWS SQS(Simple Queue Service) 컴포넌트가 지원하는 메시지 헤더는 아래와 같아요:
| Name | Description | Default | Type |
|---|---|---|---|
CamelAwsSqsAttributes (consumer) Constant: ATTRIBUTES |
ReceiveMessage에서 요청한 속성과 그 값의 맵이에요. | Map | |
CamelAwsSqsMessageAttributes (consumer) Constant: MESSAGE_ATTRIBUTES |
Amazon SQS 메시지 속성이에요. | Map | |
CamelAwsSqsMD5OfBody (common) Constant: MD5_OF_BODY |
Amazon SQS 메시지의 MD5 체크섬이에요. | String | |
CamelAwsSqsMessageId (common) Constant: MESSAGE_ID |
Amazon SQS 메시지 ID예요. | String | |
CamelAwsSqsReceiptHandle (common) Constant: RECEIPT_HANDLE |
Amazon SQS 메시지 receipt handle이에요. | String | |
CamelAwsSqsDelaySeconds (producer) Constant: DELAY_HEADER |
Amazon SQS 메시지가 다른 사람에게 보이기까지의 지연 시간(초)이에요. | Integer | |
CamelAwsSqsPrefix (common) Constant: SQS_QUEUE_PREFIX |
목록 조회 결과를 걸러내는 데 쓸 문자열이에요. | String | |
CamelAwsSqsOperation (common) Constant: SQS_OPERATION |
수행하려는 연산이에요. | String | |
CamelAwsSqsNextToken (listQueues) Constant: NEXT_TOKEN |
다음 결과 집합을 위한 토큰이에요. | String | |
CamelAwsSqsMaxResults (listQueues) Constant: MAX_RESULTS |
반환할 결과의 최대 개수예요. | Integer | |
CamelAwsSqsIsTruncated (listQueues) Constant: IS_TRUNCATED |
응답에 더 많은 결과가 있는지 여부(잘림 여부)예요. | Boolean | |
CamelAwsSqsSequenceNumber (producer) Constant: SEQUENCE_NUMBER |
FIFO 큐의 시퀀스 넘버예요. | String | |
CamelAwsSqsFailedMessageCount (sendBatchMessage) Constant: FAILED_MESSAGE_COUNT |
배치 전송 연산에서 실패한 메시지의 개수예요. | Integer | |
CamelAwsSqsSuccessfulMessageCount (sendBatchMessage) Constant: SUCCESSFUL_MESSAGE_COUNT |
배치 전송 연산에서 성공한 메시지의 개수예요. | Integer |
필수 SQS 컴포넌트 옵션
Amazon의 SQS에 접근하려면 레지스트리에 amazonSQSClient를 제공하거나, accessKey와 secretKey를 지정해야 해요.
사용법
배치 컨슈머
이 컴포넌트는 배치 컨슈머(Batch Consumer)를 구현해요.
덕분에 예를 들어 이 배치에 메시지가 몇 개 있는지 알 수 있고, 그 개수만큼 메시지를 모아서 처리하는 Aggregator를 돌릴 수도 있어요.
정적 자격 증명, 기본 자격 증명 프로바이더, 프로필 자격 증명 프로바이더
useDefaultCredentialsProvider 옵션을 true로 지정하면 명시적인 정적 자격 증명 사용을 피할 수 있어요.
기본 자격 증명 프로바이더(Default Credentials Provider)의 평가 순서는 다음과 같아요:
-
Java 시스템 프로퍼티 —
aws.accessKeyId와aws.secretKey. -
환경 변수 —
AWS_ACCESS_KEY_ID와AWS_SECRET_ACCESS_KEY. -
AWS STS의 웹 아이덴티티 토큰.
-
공유 credentials와 config 파일.
-
Amazon ECS 컨테이너 자격 증명 — 환경 변수
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI가 설정되어 있으면 Amazon ECS에서 불러와요. -
Amazon EC2 인스턴스 프로필 자격 증명.
useProfileCredentialsProvider를 true로, profileCredentialsName에 프로필 이름을 지정하면 프로필 자격 증명 프로바이더를 쓸 수도 있어요.
정적·기본·프로필 자격 증명 중에서는 한 번에 하나만 쓸 수 있어요.
더 자세한 내용은 AWS credentials 문서에서 볼 수 있어요.
예시
고급 AmazonSQS 설정
Camel 애플리케이션이 방화벽 뒤에서 돌아가거나 SqsClient 인스턴스 설정을 더 세밀하게 제어하고 싶다면, 인스턴스를 직접 만들고 빈 id로 Camel이 그 인스턴스를 쓰게 설정할 수 있어요.
아래 예시에서는 빈 id로 _myClient_를 사용해요:
자바 전용: SqsClient를 프로그래매틱하게 만들어 레지스트리에 등록하기
// create my own instance of SqsClient
SqsClient sqs = ...
// register the client into Camel registry
camelContext.getRegistry().bind("myClient", sqs);
// refer to the custom client via myClient as the bean id
from("aws2-sqs://MyQueue?amazonSQSClient=#myClient&delay=5000&maxMessagesPerPoll=5")
.to("mock:result");
DelayQueue vs 단일 메시지 지연
delayQueue 옵션을 true로 설정하면 SQS 큐가 DelayQueue가 되고, DelaySeconds 옵션이 그 지연값이 돼요. DelayQueue에 대해 더 알고 싶으면 AWS SQS 문서를 읽어 보세요. 다음 내용도 꼭 기억해 두세요:
-
표준 큐에서는 큐별 지연 설정이 소급되지 않아요 — 설정을 바꿔도 이미 큐에 들어 있는 메시지의 지연은 그대로예요.
-
FIFO 큐에서는 큐별 지연 설정이 소급돼요 — 설정을 바꾸면 이미 큐에 들어 있는 메시지의 지연에도 영향을 줘요.
공식 문서에 나온 내용이에요. 단일 메시지에 지연을 지정하려면 delayQueue 옵션을 무시하면 되고, 큐에 넣는 모든 메시지에 고정 지연을 걸고 싶으면 이 옵션을 true로 설정하면 돼요.
서버 사이드 암호화
큐에는 서버 사이드 암호화(Server Side Encryption) 속성 묶음이 있어요. 관련 옵션은 serverSideEncryptionEnabled, keyMasterKeyId, kmsDataKeyReusePeriod이에요. SSE는 기본으로 비활성화되어 있어서, 옵션을 true로 명시적으로 설정하고 관련 파라미터를 큐 속성으로 지정해야 해요.
JMS 스타일 셀렉터
SQS는 셀렉터를 허용하지 않지만, Camel Filter EIP와 적절한 visibilityTimeout 설정으로 사실상 같은 효과를 낼 수 있어요. SQS가 메시지를 디스패치하면 DeleteMessage가 도착하지 않는 한, visibility timeout까지 기다렸다가 다른 컨슈머에게 메시지를 보내려고 해요. Camel은 기본적으로 라우트 끝에서 항상 DeleteMessage를 보내는데, 라우트가 실패로 끝난 경우는 예외예요. 필터링이 제대로 되도록, 라우트가 성공적으로 끝나도 DeleteMessage를 보내지 않으려면 Filter를 사용하세요:
-
Java
-
XML
-
YAML
from("aws2-sqs://MyQueue?amazonSQSClient=#client&defaultVisibilityTimeout=5000&deleteIfFiltered=false&deleteAfterRead=false")
.filter(simple("${header.login} == true"))
.setProperty("CamelAwsSqsDeleteFiltered", constant(true))
.to("mock:filter");
<route>
<from uri="aws2-sqs://MyQueue?amazonSQSClient=#client&defaultVisibilityTimeout=5000&deleteIfFiltered=false&deleteAfterRead=false"/>
<filter>
<simple>${header.login} == true</simple>
<setProperty name="CamelAwsSqsDeleteFiltered">
<constant>true</constant>
</setProperty>
<to uri="mock:filter"/>
</filter>
</route>
- route:
from:
uri: aws2-sqs://MyQueue
parameters:
amazonSQSClient: "#client"
defaultVisibilityTimeout: 5000
deleteIfFiltered: false
deleteAfterRead: false
steps:
- filter:
simple: "${header.login} == true"
steps:
- setProperty:
name: CamelAwsSqsDeleteFiltered
constant: true
- to:
uri: mock:filter
팁 자바 코드에서는 프로퍼티 이름에
Sqs2Constants.SQS_DELETE_FILTERED상수를 쓸 수 있어요.
위 코드에서는 exchange에 알맞은 헤더가 없으면 필터를 통과하지 못하고, 동시에 SQS 큐에서도 삭제되지 않아요. 5000밀리초가 지나면 그 메시지가 다른 컨슈머에게 다시 보이게 돼요.
필터링되었을 때 Camel이 DeleteMessage를 보내도록 하려면 프로퍼티 CamelAwsSqsDeleteFiltered를 true로 설정해야 한다는 점에 주의하세요.
사용 가능한 프로듀서 연산
-
단일 메시지 (기본값)
-
sendBatchMessage
-
deleteMessage
-
listQueues
메시지 보내기
-
Java
-
XML
-
YAML
from("direct:start")
.setBody(constant("Camel rocks!"))
.to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
<route>
<from uri="direct:start"/>
<setBody>
<constant>Camel rocks!</constant>
</setBody>
<to uri="aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)&region=eu-west-1"/>
</route>
- route:
from:
uri: direct:start
steps:
- setBody:
constant: "Camel rocks!"
- to:
uri: aws2-sqs://camel-1
parameters:
accessKey: RAW(xxx)
secretKey: RAW(xxx)
region: eu-west-1
배치 메시지 보내기
SendMessageBatchRequest 또는 Iterable을 설정할 수 있어요.
자바 전용: 배치 메시지를 위해서는 List 본문을 프로그래매틱하게 만들어야 해요
from("direct:start")
.setHeader("CamelAwsSqsOperation", constant("sendBatchMessage"))
.process(exchange -> {
List<String> c = new ArrayList<>();
c.add("team1");
c.add("team2");
c.add("team3");
c.add("team4");
exchange.getIn().setBody(c);
})
.to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
결과로 SendMessageBatchResponse 인스턴스가 담긴 exchange를 받아요. 이걸 살펴보면 어떤 메시지가 성공했고 어떤 메시지가 실패했는지 확인할 수 있어요. 배치의 각 메시지에 붙는 id는 랜덤 UUID예요.
단일 메시지 삭제
deleteMessage 연산으로 단일 메시지를 삭제해요. 삭제하려는 메시지의 receipt handle 헤더를 설정해야 해요.
-
Java
-
XML
-
YAML
from("direct:start")
.setHeader("CamelAwsSqsOperation", constant("deleteMessage"))
.setHeader("CamelAwsSqsReceiptHandle", constant("123456"))
.to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
<route>
<from uri="direct:start"/>
<setHeader name="CamelAwsSqsOperation">
<constant>deleteMessage</constant>
</setHeader>
<setHeader name="CamelAwsSqsReceiptHandle">
<constant>123456</constant>
</setHeader>
<to uri="aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)&region=eu-west-1"/>
</route>
- route:
from:
uri: direct:start
steps:
- setHeader:
name: CamelAwsSqsOperation
constant: deleteMessage
- setHeader:
name: CamelAwsSqsReceiptHandle
constant: "123456"
- to:
uri: aws2-sqs://camel-1
parameters:
accessKey: RAW(xxx)
secretKey: RAW(xxx)
region: eu-west-1
결과로 DeleteMessageResponse 인스턴스가 담긴 exchange를 받아요. 이걸로 메시지가 실제로 삭제됐는지 확인할 수 있어요.
큐 목록 조회
listQueues 연산으로 큐 목록을 조회해요.
-
Java
-
XML
-
YAML
from("direct:start")
.setHeader("CamelAwsSqsOperation", constant("listQueues"))
.to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
<route>
<from uri="direct:start"/>
<setHeader name="CamelAwsSqsOperation">
<constant>listQueues</constant>
</setHeader>
<to uri="aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)&region=eu-west-1"/>
</route>
- route:
from:
uri: direct:start
steps:
- setHeader:
name: CamelAwsSqsOperation
constant: listQueues
- to:
uri: aws2-sqs://camel-1
parameters:
accessKey: RAW(xxx)
secretKey: RAW(xxx)
region: eu-west-1
결과로 ListQueuesResponse 인스턴스가 담긴 exchange를 받아요. 이걸 살펴보면 실제 큐들을 확인할 수 있어요.
큐 비우기(Purge Queue)
purgeQueue 연산으로 큐를 비워요.
-
Java
-
XML
-
YAML
from("direct:start")
.setHeader("CamelAwsSqsOperation", constant("purgeQueue"))
.to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
<route>
<from uri="direct:start"/>
<setHeader name="CamelAwsSqsOperation">
<constant>purgeQueue</constant>
</setHeader>
<to uri="aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)&region=eu-west-1"/>
</route>
- route:
from:
uri: direct:start
steps:
- setHeader:
name: CamelAwsSqsOperation
constant: purgeQueue
- to:
uri: aws2-sqs://camel-1
parameters:
accessKey: RAW(xxx)
secretKey: RAW(xxx)
region: eu-west-1
결과로 PurgeQueueResponse 인스턴스가 담긴 exchange를 받아요.
큐 자동 생성
autoCreateQueue 옵션으로, 큐가 존재하지 않을 때 SQS 큐가 자동 생성되는 걸 막을 수 있어요. 이 옵션의 기본값은 false예요. _false_로 두면 AWS에 없는 큐에 대한 어떤 연산도 성공하지 않고 에러가 반환돼요.
배치 메시지 전송과 메시지 중복 제거 전략
SendBatchMessage 연산을 쓴다면 두 가지 메시지 중복 제거(Message Deduplication) 전략을 설정할 수 있어요: - useExchangeId - useContentBasedDeduplication
첫 번째는 ExchangeIdMessageDeduplicationIdStrategy를 써서 Exchange ID를 파라미터로 사용해요. 다른 하나는 NullMessageDeduplicationIdStrategy를 써서 본문(body)을 중복 제거 요소로 사용해요.
배치 메시지 전송 연산을 쓸 때는 useContentBasedDeduplication을 사용해야 하고, 가리키는 큐에서는 content based deduplication 옵션을 활성화해야 해요.
의존성
Maven 사용자라면 pom.xml에 다음 의존성을 추가해야 해요.
pom.xml
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-aws2-sqs</artifactId>
<version>${camel-version}</version>
</dependency>
여기서 ${camel-version}은 실제 Camel 버전으로 바꿔야 해요.
더 알아보기 (Learn more)
- 자격 증명 설정이 고민되면 위의 정적·기본·프로필 자격 증명 프로바이더 섹션을 먼저 읽고, AWS credentials 문서를 참고하세요.
- 큐 지연이 필요하면 DelayQueue vs 단일 메시지 지연 섹션에서 표준 큐와 FIFO 큐의 소급 차이를 꼭 확인하세요. 서버 사이드 암호화는
serverSideEncryptionEnabled를 true로 명시 설정해야 동작해요. - JMS 스타일 셀렉터가 필요하면 Filter EIP +
visibilityTimeout+deleteIfFiltered=false조합 예제를 그대로 따라 해 보세요.