繁体   English   中英

面临从基于 spring 引导的 java 应用程序的 Amazon SQS 队列读取的问题

[英]Facing problem reading from Amazon SQS queue from a spring boot based java application

从我的本地 aws-cli 我可以获取属性并获取给定队列的 queueUrl。 而我无法从临时 spring 应用程序中获得 function 工作。 这只是一个试用代码。 我们确实有连接到 AWS SQS 的配置。 有人可以帮我吗?

流程看起来像 - 应用程序 A(本地应用程序)调用凭据服务以获取已设置角色的令牌详细信息。 然后应用程序 A 使用该令牌详细信息连接到 AWS 并从 SQS 读取。 我能够连接到 AWS,但是在尝试执行 getUrl 时出现异常。

AWS 中的角色津贴-

{“版本”:“2012-10-17”,“声明”:[{“操作”:[“sqs: ”],“资源”:“ ”,“效果”:“允许”}]}

工作命令-

aws sqs get-queue-attributes --queue-url --attribute-names 全部 --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());

    }

异常接收-

调用 GetQueueUrl 操作时发生错误 (AWS.SimpleQueueService.NonExistentQueue):指定的队列不存在或您无权访问它。

失败的行是sqs.getQueueUrl("queue-name").getQueueUrl(); 此 API 将返回名为“queue-name”的队列的 URL。 该区域下是否有具有该名称的队列?
您提到的 aws-cli 命令在语法上不正确。 --queue-url 后面应该跟队列 url (注意 get-queue-attribute 是命令的一部分,而 --queue-url 是该命令的参数)。 这不是对队列 URL 的请求(如 Java 代码所示),而是对队列属性的请求。
与 Java 代码匹配的 cli 命令将是aws sqs get-queue-url --queue-name queue-name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM