7.7. JMS 스타일 Selectors
SQS는 선택기를 허용하지 않지만 Camel 필터 EIP를 사용하고 적절한 visibilityTimeout 을 설정하여 효과적으로 이를 수행할 수 있습니다. 메시지를 디스패치하면 DeleteMessage 를 수신하지 않는 한 메시지를 다른 소비자에게 디스패치하기 전에 표시 시간 초과까지 기다립니다. 기본적으로 Camel은 경로가 실패로 끝나지 않는 한 항상 경로 끝에 DeleteMessage 를 보냅니다. 경로를 성공적으로 완료한 경우에도 적절한 필터링을 수행하고 DeleteMessage 를 보내지 않으려면 필터를 사용합니다.
from("aws2-sqs://MyQueue?amazonSQSClient=#client&defaultVisibilityTimeout=5000&deleteIfFiltered=false&deleteAfterRead=false")
.filter("${header.login} == true")
.setProperty(Sqs2Constants.SQS_DELETE_FILTERED, constant(true))
.to("mock:filter");
위의 코드에서 교환에 적절한 헤더가 없으면 필터를 통해 생성하지 않으며 SQS 대기열에서도 삭제되지 않습니다. 5000초가 지나면 다른 사용자가 메시지를 볼 수 있게 됩니다.
필터링되는 경우 Camel에 대해 Sqs2Constants.SQS_DELETE_FILTERED 속성을 true 로 설정해야 합니다.