Компонент Apache Camel AWS / SQS

Camel v2.8 (верблюд-aws / sqs)

Можно ли отправлять сообщения в общую очередь с помощью компонента camel aws-sqs?

Я могу отправлять напрямую в myQueue, но не в другие очереди, к которым у меня есть доступ через политику доступа SQS, и подтвердил, что он работает напрямую через CURL.

URL-адрес конечной точки Camel aws-sqs и работающий маршрут выглядят следующим образом:

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

Предоставляет ли Camel aws-sqs v2.8 эту функцию?

Спасибо.


person user1869653    schedule 02.12.2012    source источник


Ответы (1)


Возможно, это не лучший вариант, поскольку он ограничивает клиента, но я уже создавал и регистрировал 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, но я работаю с более простым подходом.

person Jeff E    schedule 07.08.2013