标签: amazon-sqs

AWS S3:在收到文件后通过S3通知触发多个目标

我想在AWS S3存储桶中设置以下事件/通知配置:收到文件(s3:ObjectCreated:*)后,将触发两个目标:

  • SQS:将文件排队等待一段时间的保留期的详细后期处理
  • Lambda:做一些快速的即时指标处理

当我尝试通过AWS控制台设置配置时,我收到以下错误消息:

Configurations overlap. Configurations on the same bucket cannot share a common event type. : s3:ObjectCreated:*, s3:ObjectCreated:*
Run Code Online (Sandbox Code Playgroud)

我尝试按照用户指南的建议通过AWS SDK(Java)设置配置,但结果类似:

Caught an AmazonServiceException, which means your request made it to Amazon S3, but was rejected with an error response for some reason.
Error Message:    Configurations overlap. Configurations on the same bucket cannot share a common event type. (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: A0E8738522EA218F)
HTTP Status Code: 400
AWS Error Code:   InvalidArgument …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-sqs amazon-web-services aws-lambda

9
推荐指数
3
解决办法
6538
查看次数

AWS SQS 异步队列模式(请求/响应)

我正在寻求有关我正在使用产品做出的架构设计决策的帮助。

我们有多个生产者(由 API 网关调用 Lambda 启动)将消息放在 SQS 队列(请求队列)上。可以有多个同时调用,因此会有多个并行运行的 Lambda 实例。

然后我们有消费者(假设有 20 个 EC2 实例)在 SQS 上进行长轮询以获取消息以处理它们。它们每个需要大约 30-45 秒来处理一条消息。

理想情况下,我希望将响应发送回发出请求的生产者 - 这是我在 SQS 方面遇到的问题。理论上,我会有一个单独的响应队列,最初的 Lambda 生产者将使用它,但似乎没有办法挑选特定的相关响应。也就是说,每个 Lambda 函数可能会获取另一个函数的响应。我正在寻找类似于这种设计模式的东西:http : //soapatterns.org/design_patterns/asynchronous_queuing

我能看到的唯一选择是为每个 Lambda API 调用创建一个新的 SQS 响应队列,在消息中传递其 ARN 供消费者放置响应,但我无法想象这是非常有效的 - 特别是当有一分钟可能有数百条消息?我错过了一些明显的东西吗?

我想唯一的其他选择是设置更大的消息代理(例如 RabbitMQ/ApacheMQ)环境,但如果可能的话,我想避免这种情况。

谢谢!

amazon-sqs amazon-web-services aws-lambda

9
推荐指数
2
解决办法
5605
查看次数

从 ARN 获取 SQS 队列名称或 URL,或通过 ARN 检查队列是否存在

AWS 文档一致指出,不应根据名称或 URL 以编程方式构建 ARN,因为不能保证这些字符串的构建方式在时间上保持不变。

我的问题是,在 SQS 上,GetQueueAttributes返回的 RedrivePolicy 属性仅引用 ARN 的死信队列。

我目前正在编写一个服务来创建队列并设置它们,或者验证它们的设置是否正确(如果它们已经存在)。但是我看不到验证死信队列 ARN 是否与现有队列匹配的方法,除非我确实解析它以获取名称。有没有办法解决这个问题?

(实际上,公平地说,有一种方法可以遵守“不以编程方式解析 ARN”规则,即调用ListQueues然后循环遍历结果 URL,在每个URL 上调用GetQueueAttributes,但这听起来很愚蠢,并且如果帐户上的队列超过 1000 个,则可能会失败,所以我不这样做)。

目前正在寻找 C# 中的解决方案,但该问题与语言无关。

c# amazon-sqs amazon-web-services

9
推荐指数
1
解决办法
3364
查看次数

我可以通过给定的 AWS 集成将 SNS(或 SQS)消息保存到 S3 吗?

我想将所有 SNS 消息保存到 S3,以便我可以保留完整的历史记录。目的是有能力在诊断和发布时回头看,稍后索引并使用它来审计,重放,重建数据等。现在,我只想将它们转储到S3(便宜),稍后我会在需要时深入研究它。

  • 我不需要转换或操作数据,我现在可以转储它

我可以使用 AWS 提供的集成来实现这一点,还是需要编写自己的 HTTP 服务或 Lambda?

如果可以避免,我宁愿不必编写和维护 lambda 或服务。

到目前为止,我所看到的是,我可以将HTTP 端点设置为 SNS 订阅者,但它的消息格式与S3 http api 不同,因此需要 lambda 来转换它。也是初始订户确认消息。这是不可能的,我应该开始使用我自己的服务/lambda 吗?

amazon-s3 amazon-sqs amazon-web-services amazon-sns

9
推荐指数
1
解决办法
4683
查看次数

Celery + SQS 两次接收相同的任务,同时具有相同的任务 ID

在flask应用程序中使用带有SQS的芹菜,
芹菜同时接收相同的任务两次,任务ID相同

像这样运行工人,
celery worker -A app.jobs.run -l info --pidfile=/var/run/celery/celery.pid --logfile=/var/log/celery/celery.log --time-limit=7200 --concurrency=8

这是芹菜的日志

[2019-11-29 08:07:35,464: INFO/MainProcess] Received task: app.jobs.booking.bookFlightTask[657985d5-c3a3-438d-a524-dbb129529443]  
[2019-11-29 08:07:35,465: INFO/MainProcess] Received task: app.jobs.booking.bookFlightTask[657985d5-c3a3-438d-a524-dbb129529443]  
[2019-11-29 08:07:35,471: WARNING/ForkPoolWorker-4] in booking funtion1
[2019-11-29 08:07:35,473: WARNING/ForkPoolWorker-3] in booking funtion1
[2019-11-29 08:07:35,537: WARNING/ForkPoolWorker-3] book_request_pp
[2019-11-29 08:07:35,543: WARNING/ForkPoolWorker-4] book_request_pp
Run Code Online (Sandbox Code Playgroud)

收到两次相同的任务,并且两者同时运行,

在 pyhton 烧瓶中使用 celery==4.4.0rc4、boto3==1.9.232、kombu==4.6.6 和 SQS。
在 SQS 中,默认可见性超时为 30 分钟,我的任务没有 ETA 也没有确认

我的任务.py

from app import app as flask_app
from app.jobs.run import capp
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(flask_app) …
Run Code Online (Sandbox Code Playgroud)

amazon-sqs celery flask celery-task

9
推荐指数
1
解决办法
312
查看次数

配置 SQS 死信队列以在收到消息时发出云监视警报

我正在使用 Amazon SQS 中的死信队列。我希望每当队列收到新消息时,它都应该引发 CloudWatch 警报。问题是我number_of_messages_sent在队列的指标上配置了一个警报:但是在Amazon SQS 死信队列 - Amazon Simple Queue Service文档中提到的死信队列的情况下,该指标无法按预期工作。

现在使用了一些关于此的建议,number_of_messages_visible但我不确定如何在警报中配置它。因此,如果我设置了 this 的值,metric>0那么这与在队列中获取新消息不同。如果存在旧消息,则度量值将始终为>0。我可以做某种数学表达式来在某个定义的时间段(假设一分钟)内获得此指标中的增量,但我正在寻找一些更好的解决方案。

java message-queue amazon-sqs amazon-web-services

9
推荐指数
5
解决办法
5832
查看次数

从无服务器功能中获取 SQS URL?

我正在构建一个无服务器应用程序,它在资源中定义了一个 SQS 队列,如下所示:

resources:
  Resources:
    TheQueue:
      Type: "AWS:SQS:Queue"
      Properties:
        QueueName: "TheQueue"
Run Code Online (Sandbox Code Playgroud)

我想从其中一个函数中向这个队列发送消息。如何从函数内部访问 URL?我想把它放在这里:

const params = {
    MessageBody: 'message body here',
    QueueUrl: 'WHATS_THE_URL_HERE',
    DelaySeconds: 5
};
Run Code Online (Sandbox Code Playgroud)

amazon-sqs serverless-framework serverless

9
推荐指数
1
解决办法
2593
查看次数

使用部分批处理响应使 SQS 消息再次可见

假设:

  • AWS Lambda 以 10 个元素批量处理来自 AWS SQS FIFO 队列的消息,具有 25 个可用消息组 ID(以随机方式分配)
  • 处理一条消息大约需要 30-60 秒
  • SQS 消息可见性超时设置为 10 分钟
  • 集成触发器 Lambda-SQS 已启用“部分批量响应”

当 Lambda 返回带有失败消息 ID 的部分批处理响应时,例如:

{
    "batchItemFailures": [
        {
            "itemIdentifier": "d4c7c57f-c12c-4639-abe3-3a0d37690790"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

成功处理的消息将从队列中删除。但是,批次中失败的消息仍在等待可见性超时,而不是立即对消费者可见。失败消息的行为是否正确?或者让它们立即可见的唯一方法是调用 SQS API 并将可见性超时更改为 0?

batch-processing amazon-sqs amazon-web-services aws-lambda aws-sqs-fifo

9
推荐指数
1
解决办法
1694
查看次数

什么是可能的方法:SQS或SNS?


我将制作集成亚马逊云服务的rails应用程序.

  • 我已经探索了亚马逊的SNS服务,它提供了我不想做的公共订阅设施.我只想通知特定用户.例如,如果我在一个主题中有5个订户,那么通知应该转到特定订户.
  • 我还探讨了亚马逊的SQS,其中我必须编写一个监视消息队列的轮询器.SQS也有一个锁机制,但问题是它是分布式的,因此有可能从另一个队列副本获取相同的消息进行处理.

我想知道可行的方法是什么.

ruby-on-rails amazon-sqs amazon-web-services amazon-sns

8
推荐指数
1
解决办法
2487
查看次数

AWS FIFO SQS重复数据删除ID如何工作?

我正在尝试将AWS SQS FIFO服务与ElasticBeanstalk工作人员环境一起使用。

假设我使用发送了一条消息MessageDeduplicationId test,如果我在接下来的5分钟内继续发送此确切消息,该消息将被忽略,对吗?

如果我使用发送消息MessageDeduplicationId test,使用者处理该消息并将其删除,然后在大约1分钟内再次发送完全相同的消息,该怎么办。此消息会被忽略吗?

我的问题是,只要MessageDeduplicationId 队列/运行中仍存在重复数据删除,是否会发生重复数据删除还是ID横幅永远存在,无法发送其他任何具有相同ID的消息。

谢谢。

duplicates amazon-sqs amazon-web-services

8
推荐指数
2
解决办法
2310
查看次数