问题标签 [spring-cloud-aws]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
921 浏览

spring-boot - 在 Spring Cloud AWS 中使用 Java 配置配置邮件发件人

我想使用 Amazon SES、Spring Cloud AWS 和 Spring Boot 2.1.5 发送电子邮件。

文档中,它提供了 XML 来配置邮件发送者。有什么方法可以使用 Java 配置而不是 XML?

0 投票
1 回答
1339 浏览

java - 使用 @SqsListener 注解为 FIFO 配置消息组 ID

我正在使用 Spring Cloud API 提供的 @SqsListener 来使用 FIFO 队列中的消息。我想根据特定的消息组 ID 使用消息。不确定在哪里配置此设置。

我尝试阅读 AWS Spring Cloud 文档并进行了一些谷歌搜索,但找不到答案或示例。

我的注释如下所示:

我有以下 SQS 配置:

并使用以下依赖项:

我主要是在寻找有关如何配置 @SqsListener 以根据消息组 ID 读取消息的答案。

0 投票
2 回答
10772 浏览

spring-boot - 无法检索请求的元数据 /latest/meta-data/public-hostname

我正在为 AWS Kinesis 部署一个带有 spring-cloud-stream 和 binder 的 springboot 应用程序。如果 beanstalk 配置了公共 ip,则该应用程序在部署在 aws elastic beanstalk 上时可以正常工作。当我们使用私有 ip 设置 beanstalk 时,应用程序会在部署时抛出警告,因为无法从 aws 获取一些元数据。

为什么要尝试获取这些资源?有一些解决方法可以删除此警告吗?

这些是部署应用程序并且在 ec2 上未设置公共 ip 时引发的警告。

0 投票
1 回答
358 浏览

spring - Spring Boot AWS cloudwatch 和 S3 冲突(?)问题

问题陈述
AWS 'Fargate' 应用程序与 aws 执行器一起工作正常,但在添加 s3 支持时无法启动

详细信息
我有一个在 AWS Fargate 上运行的应用程序,它使用spring-cloud-aws-actuatorspring-cloud-starter-aws包。
该应用程序在“fargate”和本地(使用)中运行时运行良好。management.metrics.export.cloudwatch.enabled=false我最近添加了从 S3 存储桶读取的支持,在本地测试此代码运行良好,但是当我将其部署到“fargate”时,应用程序无法启动并出现以下错误。

原因:org.springframework.beans.factory.BeanCreationException:
在类路径资源 [org/springframework/cloud/aws/autoconfigure/metrics/CloudWatchExportAutoConfiguration.class] 中定义名称为“amazonCloudWatchAsync”的 bean 创建错误:调用 init 方法失败;嵌套异常是 java.lang.IllegalStateException:
没有可用的 EC2 元数据,因为应用程序没有在 EC2 环境中运行。仅当应用程序在 EC2 实例上运行时才可以进行区域检测

由于这在我添加 S3 代码之前有效,我只能推测问题与新代码有关,但我真的不知道从哪里开始拍摄。

我做
了什么 在程序中我添加了代码来检查我是在本地运行还是在 AWS 中运行。如果我在本地运行,我会使用 ProfileCredentialsProvider 创建一个AmazonS3对象,例如

当我检测到我在 AWS 上(使用 Spring 配置文件)时,除了我使用DefaultAWSCredentialsProviderChain之外,我执行与上述相同的操作,也许这就是问题所在?但我不确定如何在“Fargate”中运行时从 spring aws 自动装配AmazonS3对象,但在本地运行时则不然。

建议?
我知道以上内容有点含糊,如果您让我知道有什么帮助,我很乐意提供更多详细信息。话虽如此,我正在寻找一种在本地运行我的应用程序(用于测试)的方法,它允许我访问 S3 存储桶并禁用 cloudwatch 执行器代码,但随后允许在“Fargate”环境中运行时使用两者。

0 投票
2 回答
7129 浏览

java - 使用 Spring Boot 侦听消息队列 SQS 不适用于标准配置

我无法使用 Spring Boot 和 SQS 制作工作队列侦听器(消息已发送并出现在 SQS ui 中)

@MessageMapping@SqsListener工作

Java:11
Spring Boot:2.1.7
依赖:spring-cloud-aws-messaging

这是我的配置

我也注意到org.springframework.cloud.aws.messaging.config.SimpleMessageListenerContainerFactoryorg.springframework.cloud.aws.messaging.config.annotation.SqsConfiguration在启动时运行

还有我的测试

你觉得有什么不对吗?

我为示例创建了一个存储库:(https://github.com/mmaryo/java-sqs-test
在测试文件夹中,更改 'application.yml' 中的 aws 凭据,
然后运行测试

0 投票
1 回答
69 浏览

java - spring cloud aws 项目不再有活跃的所有者了吗?

在spring-cloud-aws项目中,我在过去几个月中没有看到任何活动。没有问题得到回答,没有 PR 得到审查或合并。这对我的团队来说是个问题,因为我们正在尝试使用这个模块,因为我们严重依赖 Spring Boot 应用程序和 sqs 队列,但是有一些新功能不再包含在模块中,例如列出 SNS 消息的类型化消息属性。

我的一位同事甚至打开了一个 PR 来解决上述问题,但没有任何反应。我真的不知道如何在 Spring 团队中提高对这个问题的认识。

Spring 开发团队是否甚至意识到了这个问题,只是不关心,还是他们不知道?如果有人可以拥有该项目的所有权,至少可以批准 PR,那就太好了。我个人并不想编写自定义实现来与 AWS 集成,或者在没有 spring 的情况下使用原始 API。

0 投票
2 回答
1337 浏览

spring-boot - 如何在@SpringBootApplication 测试中使用@Configuration 排除类

我正在使用一个名为 spring-cloud-aws 的依赖模块。它有一个 @Configuration 类,如 org.springframework.cloud.aws.messaging.config.annotation.SqsConfiguration 在我的 SpringBoot JUnit 测试用例中,检测到 SqsConfiguration 类并且初始化 Bean。我想在我的 JUNit 测试用例中排除这个配置。如何做到这一点?

我尝试使用 @ComponentScan 它没有用。

加载此配置类需要 aws 凭证可用。我不想注入凭据来运行一个简单的 Bean 测试用例。

org.springframework.beans.factory.BeanCreationException:在类路径资源[org/springframework/cloud/aws/messaging/config/annotation/SqsConfiguration.class]中定义名称为“simpleMessageListenerContainer”的bean创建错误:调用init方法失败;嵌套异常是 com.amazonaws.services.sqs.model.AmazonSQSException:请求中包含的安全令牌已过期

0 投票
2 回答
3631 浏览

java - Spring Boot 中具有不同凭证的多个 AWS SQS 队列

我有一个 Spring Boot 应用程序并希望接收来自多个 AWS SQS 队列的消息。这些队列都有自己的凭据(遗憾的是我对此无能为力)。这些凭据都不能访问其他队列之一,它们都仅限于一个队列。

只有一个队列和凭证,这很简单。我只需将凭据提供为AWSCredentialsProviderBean 并用@SqsListener\注释我的方法@EnableSqs
但我无法弄清楚如何使用多个凭据来做到这一点。

@SqsListener注释无法提供凭据、预配置对象AmazonSqs或任何其他有帮助的东西。

CredentialsProvider我通过扩展或客户端搜索了一种将队列映射到凭据的方法AmazonSqs,但无济于事。
我什至尝试在 AmazonHttpClient 的标头中注入凭据,但这也是不可能的。

我试图创建手动收听 SQS 队列所需的一切。但我坚持为SimpleMessageListenerContainer.
requiredQueueMessageHandler仅在创建为具有应用程序上下文的 bean 时才有效。否则它不会查找带有注释的方法@SqsListener
可悲的是,我能找到的唯一教程或示例要么使用我想避免的 JMS,要么仅使用@SqsListener带有一个队列的注释。

有没有其他方法可以为多个队列提供不同的凭据?

我的测试代码:

编辑:

在尝试了更多之后,我能够将我的 AmazonSQS 客户端注入两个单独的SimpleMessageListenerContainer. 然后问题就变成了QueueMessageHandler

如果我在没有 bean 上下文的情况下手动创建它,它根本不会查找带有@SqsListener注释的任何方法。并且无法手动设置处理程序。
如果我将它创建为 bean,它将查看每个 bean 的注释。所以它也会找到它不应该寻找的队列的方法。然后它会崩溃,因为凭据不起作用。
我想不出一种方法来QueueMessageHandler只为单个 SqsListener 方法创建一个。除了.
_SimpleMessageListenerContainerQueueMessageHandler

0 投票
1 回答
4849 浏览

java - 防止 spring-cloud-aws-messaging 尝试停止队列

spring-cloud-aws-messaging在 Spring Boot 项目中使用。
我在 AWS 中手动创建了 SQS 队列。

它的使用方式如下:

它工作正常。但是当我在 IDE 中停止我的应用程序时,或者当 Spring Boot 测试完成时,它会尝试停止队列。它无法阻止它并最终超时。它抛出这个异常:

这种等待会减慢应用程序或测试关闭的速度。

我怎么知道spring-cloud-aws-messaging它是一个手动创建的队列,它不应该尝试关闭它?

0 投票
1 回答
2408 浏览

spring - 创建名为“amazonS3Client”的 bean 时出错:当前正在创建请求的 bean:是否存在无法解析的循环引用?

一切都开始了,因为 Spring Cloud AWS 没有正确配置SimpleStorageProtocolResolver。此类负责在使用ResourceLoader时处理 s3:// 协议。有关更多详细信息,请参阅问题:在 Spring AWS 示例中无法转换为 org.springframework.core.io.WritableResource

所以,我不得不手动创建它。但我也在使用 LocalStack 解决方案(https://github.com/localstack/localstack),并且由于 Spring Cloud AWS 没有手动配置端点的选项,我不得不(猜猜是什么?)创建AmazonS3Client用手。

问题来了,当我在我的类S3Configuration类中创建两个 bean 时(见下文),Spring Framework 只是跳过了 bean 创建。而且,当我尝试将其连接到S3Handler类(见下文)时,会发生此错误:创建名称为“ amazonS3Client ”的 bean 时出错:当前正在创建请求的 bean:是否存在无法解析的循环引用?

但同样,这一切都来了,这些类之间没有循环引用。

我已经简化了项目,所以我可以在这里发布它:

pom.xml

S3Configuration.java

S3Handle.java

应用程序.java

应用程序属性

任何想法,为什么会这样?