2012-12-02 4 views
3

카멜 V2.8 (낙타 AWS/SQS)아파치 카멜 AWS/SQS 성분

는 낙타 AWS-SQS 요소를 사용하여 공유 큐에 메시지를 보낼 수있다? 내가 myQueue가되는 대신 보낼 수 있어요

되지는 CURL를 통해 직접 작동하는지 내가 SQS 액세스 정책을 통해 액세스 권한을 가지고 확인 다른 대기열

이 낙타 AWS-SQS 작동 엔드 포인트 URL 및 경로는 다음과 같습니다 :

https://sqs.us-west-1.amazonaws.com/111222333444/sharedQueue?Action=SendMessage 
&MessageBody=test 
&Version=2011-10-01 
&Timestamp=2012-1201T22%3A01%3A15Z 
&Signature=Kl0Vki0KzvoB6Z2NUHFT7mxsurCn%2FjPHv4%2BJ8LEo7NA%3D 
&SignatureMethod=HmacSHA256 
&SignatureVersion=2 
&AWSAccessKeyId=AKIXJMGM5GYMGSTANQ8A 

합니까 낙타 AWS-SQS :

from("someplace").to("aws-sqs://myQueue?amazonSQSEndpoint=" + endpoint + "&accessKey=" +  accessKey +"&secretKey=" + secretKey); 

나는 다음과 같은 형식의 URL을 제공하면서 공유 대기열에 보낼 수 있어야합니다 v2.8에서는이 기능을 제공합니까?

감사합니다.

답변

0

이것은 클라이언트를 제한하기 때문에 최선의 옵션이 아닐 수 있지만 아마 AmazonSQSClient (경로 정의 매개 변수 amazonSQSClient에 사용)를 만들고 등록했습니다. 대신에 ListQueues를 오버라이드 (override)하는 서브 클래스를 작성해, QueueOwnerAWSAccountId 파라미터를 가지는 getQueueURL를 호출합니다. 여기 내 사용자 지정 클라이언트입니다 :

import com.amazonaws.AmazonClientException; 
import com.amazonaws.AmazonServiceException; 
import com.amazonaws.ClientConfiguration; 
import com.amazonaws.auth.AWSCredentials; 
import com.amazonaws.services.sqs.AmazonSQSClient; 
import com.amazonaws.services.sqs.model.GetQueueUrlRequest; 
import com.amazonaws.services.sqs.model.GetQueueUrlResult; 
import com.amazonaws.services.sqs.model.ListQueuesResult; 

public class CustomSQSClient extends AmazonSQSClient { 

private String queueName; 
private String accountId; 

public CustomSQSClient(AWSCredentials awsCredentials, ClientConfiguration clientConfiguration, String queueName, String accountId) { 
    super(awsCredentials, clientConfiguration); 
    this.queueName = queueName; 
    this.accountId = accountId; 
} 

@Override 
public ListQueuesResult listQueues() throws AmazonServiceException, 
     AmazonClientException { 

    GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest(); 
    getQueueUrlRequest.setQueueName(queueName); 
    getQueueUrlRequest.setQueueOwnerAWSAccountId(accountId); 
    GetQueueUrlResult getQueueUrlResult = getQueueUrl(getQueueUrlRequest); 

    if (getQueueUrlResult.getQueueUrl() != null) { 
     ListQueuesResult listQueuesResult = new ListQueuesResult(); 
     listQueuesResult.getQueueUrls().add(getQueueUrlResult.getQueueUrl()); 
     return listQueuesResult; 
    } else { 
     return super.listQueues(); 
    } 
} 
} 

더 나은 옵션은 org.apache.camel.component.aws.sqs.SqsEndpoint.doStart을 무시하는 것입니다,하지만 난이 쉽게 접근하고 있어요.