2012-12-02 58 views
3

骆驼V2.8(骆驼-AWS/SQS)Apache的骆驼AWS/SQS部件

是有可能使用骆驼AWS-SQS部件将消息发送到一个共享队列?

我能够直接发送到myQueue中而不是其他队列,我有机会获得通过SQS访问策略,并确认它直接通过卷曲

骆驼AWS-SQS端点URL和路由的工作原理是这样的:

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

我需要能够发送到共享队列,而在下面的格式提供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 v2.8提供了这种功能?

谢谢。

回答

0

这可能不是最好的选择,因为它限制了客户端,但我已经创建并注册了AmazonSQSClient(用于路由定义参数amazonSQSClient)。我创建了一个子类来覆盖listQueues,而不是调用getQueueURL,它具有QueueOwnerAWSAccountId参数。这里是我的自定义客户端:

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,但我用更简单的方法工作。