AWS Java SDK SQSlistener端点问题

时间:2018-04-26 14:50:33

标签: java spring amazon-web-services amazon-sqs

我正在使用AWS Java SDK以及spring cloud aws在我的项目中使用SES和SQS。我遇到了一个小问题。当我尝试运行我的应用程序时,我收到错误:

  

创建名为'simpleMessageListenerContainer'的bean时出错   在类路径资源中   [组织/ springframework的/云/ AWS /消息/配置/注解/ SqsConfiguration.class]:   调用init方法失败;嵌套异常是   com.amazonaws.services.sqs.model.AmazonSQSException:凭证应该   范围限定为有效区域,而不是“队列”。

作为序言,在我的app.properties文件中,我有一个属性queue.endpoint=https://queue.amazonaws.com/1234567890/queue-name.fifo,并从aws cli中检索端点。

我已阅读AWS文档,发现此端点是旧端点。此属性由spring cloud aws库中的@SqsListener注释使用。

我设法通过查看我是否使用旧端点并通过shell脚本(即https://sqs.us-east-1.amazonaws.com/123456780/queue-name.fifo)将其转换为非旧端点来避免此问题。

我想知道spring cloud aws库是否存在使用旧版端点的问题。我注意到端点为https://us-east-2.queue.amazonaws.com/1234567890/queue2-name.fifo的其他队列没有问题,所以它可能错误地解析了us-east-1传统端点?我也不确定在我的应用程序中是否需要进行任何配置才能使用旧版端点。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了该问题,那么您的问题是有关SQS Queue端点的,该端点未在端点的开头附加us-east-1。它不是旧式端点。在AWS中,某些服务不允许您在端点中指定区域。路由到此端点https://queue.amazonaws.com/1234567890/queue-name.fifo的任何内容都将自动路由到AWS的us-east-1区域。

AWS与端点有关的文档中明确提到了这一点。 (Link

  

某些服务(例如IAM)不支持区域;因此,他们的   端点不包含区域。某些服务,例如Amazon EC2,   让您指定不包含特定区域的端点,   例如https://ec2.amazonaws.com。在这种情况下,AWS路由   终点到us-east-1。