So. AWS Simple Queue Service에는 메시지 크기에 대한 몇 가지 제한 사항이 있습니다. S3 버킷 스토리지를 사용하여 이러한 제한을 피하는 데 도움이되는 확장 클라이언트 라이브러리라는 library도 있습니다. 또한 Apache Camel을 사용하여 대기열을 관리합니다.Apache camel 및 SQS 확장 클라이언트 라이브러리
나는 개념을 오해한다고 생각하지만 아파치 카멜과 확장 된 SQS 라이브러리가 함께 작동하도록하는 데 문제가있다.
은 모든 그래서 일단 내가 256킬로바이트까지 메시지 처리 문제가없는 camel-context.xml
<bean name="sqsClient" class="com.amazonaws.services.sqs.AmazonSQSAsyncClient">
<constructor-arg>
<bean class="com.amazonaws.auth.BasicAWSCredentials">
<constructor-arg value="${access.key}"/>
<constructor-arg value="${secret.key}"/>
</bean>
</constructor-arg>
<property name="region" ref="awsRegion"/>
</bean>
그리고이 시점 내부
from("aws-sqs://queue?amazonSQSClient=#sqsClient" +
"&maxMessagesPerPoll=10" +
"&deleteAfterRead=false" +
"&concurrentConsumers=10" +
"&attributeNames=All" +
"&messageAttributeNames=All"
).log(body());
sqsClient
이 정의 된 새로운 경로를 정의했다.
추가로 이동하십시오. 확장 SQS 라이브러리는 메시지가 256KB보다 큰지 여부를 감지하고 S3 저장 장치 내의 파일을 참조합니다. 그리고 간단하게 나중에 가져옵니다.
[{ "테스트 버킷 ascelhem", "s3Key" "b022dfd8-ed40-4213-a41e-5a0e82090ef4" "s3BucketName"} "com.amazon.sqs.javamessaging.MessageS3Pointer"]
우리가 사용 가능 큰 페이로드를 지원하는 SQS 확장 된 클라이언트 구성을 설정 모든첫째 : 클라이언트가 사용할 수있게되기 전에
몇 가지 사전 구성이 있습니다.
ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration().withLargePayloadSupportEnabled(s3, s3BucketName);
그리고 마지막으로
AmazonSQS sqsExtended = new AmazonSQSExtendedClient(new AmazonSQSClient(credentials), extendedClientConfig);
Region sqsRegion = Region.getRegion(Regions.US_WEST_1);
sqsExtended.setRegion(sqsRegion);
그래서 나는 봄 DSL을 통해 구성 할 수 있습니다 또는 내가 메시지 본문을 얻을 메시지를 가져오고 프로세서 내부해야
?다음은 메시지 본문을 가져 오는 데 도움이되는 방법입니다.
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl);
List<Message> messages = sqsExtended.receiveMessage(receiveMessageRequest).getMessages();
아파치 낙타가 어떻게 든 getMessage를 대체합니까? 앱 내부에서 메소드 body()
을 호출하여 메시지 본문을 가져올 수 있습니다.
그리고 매우 큰 메시지를 처리 할 수있는 방식으로 Apache Camel을 구성 할 수있는 기회가 있다면 new ExtendedClientConfiguration() .withLargePayloadSupportEnabled(s3, s3BucketName);
행은 XML 파일에서 정적 메서드를 호출하는 방법을 모르기 때문에 많이 혼란스러워합니다.
그리고 마지막 라인 여기에 우리가 AmazonSQSAsyncClient
사용하지만, 앞서 언급 한 바와 같이, 확장 된 클라이언트 라이브러리는 AmazonSQS
... 인터페이스를 통해 초기화
<bean name="sqsClient" class="com.amazonaws.services.sqs.AmazonSQSAsyncClient">
? 그래서 나는 완전히 갇혀있다.
또한이 라이브러리를 사용하면 example이됩니다. 그것은 당신에게 도움이 될 수 있습니다.
감사합니다.