2016-08-06 5 views
1

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이됩니다. 그것은 당신에게 도움이 될 수 있습니다.

감사합니다.

답변

0

그래서 내가 찾은 최선의 해결책은 먼저 s3 객체에서 메시지 본문을 가져 와서 그걸로 somethings를 수행하는 프로세스를 만드는 것이 었습니다.