Столкновение с проблемой чтения из очереди Amazon SQS из Java-приложения с весенней загрузкой - PullRequest
0 голосов
/ 29 октября 2019

Из моего локального aws-cli я могу получить атрибуты и получить queueUrl данной очереди. Принимая во внимание, что я не могу заставить эту функцию работать из приложения adhoc spring. Это всего лишь пробный код. У нас есть конфиг для подключения к AWS SQS. Может ли кто-нибудь помочь мне в этом?

Поток выглядит так: приложение A (предварительное приложение) вызывает службу учетных данных, чтобы получить сведения о токене, для которого установлена ​​роль. Затем приложение A использует эти данные токена для подключения к AWS и чтения из SQS. Я могу подключиться к AWS, но при попытке сделать getUrl получаю исключение.

Допуск роли в AWS-

{"Version": "2012-10-17", "Statement": [{"Action": ["sqs: "],"Resource": "", "Effect": "Allow"}]}

Рабочая команда-

aws sqs get-queue-attribute --queue-url --attribute-names All --region us-east-1

Образец кода Java-

 AmazonSQS sqs = AmazonSQSClientBuilder.standard()
           .withCredentials(new AWSStaticCredentialsProvider(credentials))      
           .withRegion(Regions.US_EAST_1).build();

    String queueUrl = "";
    try {

        queueUrl = sqs.getQueueUrl("queue-name").getQueueUrl();
    } catch (Exception e) {
        System.out.println(e);
    }

    ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl).withWaitTimeSeconds(10)
            .withMaxNumberOfMessages(10);
    List<Message> sqsMessages = sqs.receiveMessage(receiveMessageRequest).getMessages();
    for (Message message : sqsMessages) {
        System.out.println("Received vice message from sqs - " + message.getBody() + ". Message ReceiptHandle - "
                + message.getReceiptHandle());

    }

Получение исключения-

Произошла ошибка (AWS.SimpleQueueService.NonExistentQueue), когдавызов операции GetQueueUrl: указанная очередь не существует или у вас нет к ней доступа.

1 Ответ

0 голосов
/ 29 октября 2019

Сбой строки: sqs.getQueueUrl("queue-name").getQueueUrl();, этот API вернет URL-адрес очереди с именем «имя-очереди». Есть ли очередь с таким именем в этом регионе?
Упомянутая вами команда aws-cli не является синтаксически правильной. --queue-url должен сопровождаться URL-адресом очереди (обратите внимание, что get-queue-attribute является частью команды, а --queue-url является параметром для этой команды). Это не запрос URL-адреса очереди (как Java-код), а запрос атрибута очереди.
команда cli, соответствующая коду Java, будет aws sqs get-queue-url --queue-name queue-name

...