【问题标题】:S3 Notification Occurrence or SQS Reception Sequencer OrderingS3 通知发生或 SQS 接收排序器排序
【发布时间】:2019-03-22 08:47:08
【问题描述】:

来自Amazon S3 Event Notifications documentation

在您的通知配置中,您可以请求 Amazon S3 将事件发布到 SQS 队列。目前,标准 SQS 队列仅允许作为 Amazon S3 事件通知目标,而不允许使用 FIFO SQS 队列。有关 SQS 的更多信息,请参阅 Amazon SQS 产品详细信息页面。

SQS 事件队列的对象事件上的排序器会反映 S3 操作发生的顺序,还是 SQS 队列(非先进先出)接收事件的顺序?

【问题讨论】:

标签: amazon-web-services amazon-s3 amazon-sqs


【解决方案1】:

event.Records[0].s3.object.sequencer 中的 sequencer 仅用于消除单个桶中单个对象键的事件排序。

它允许您确定影响单个对象的事件的顺序,例如多个覆盖一个对象或创建一个对象的多个版本。

对于不同存储桶或存储桶内对象的事件,排序器值不应被视为对排序比较有用。

改为使用event.Records[0].eventTime 来比较影响不同对象的事件的顺序。

事实上,你通常可以只使用这个值,即使是单个对象,除非事件在时间上很接近。

https://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html

请注意,在比较一个对象的序列器值时,您必须首先确定最长的序列器值的最大长度,并将所有其他的左填充与0 相同的长度,然后在词法上比较它们,作为字符串,而不是数字(它们是十六进制字符串)...因此,如果您有定序器值211f38,则需要将21 填充到0021,此时它被正确确定为小于1f37。这些是示例,真正的音序器要长得多。不要期望定序器是单调的——只是对于一个对象,后面的值总是大于前面的值。

【讨论】:

    【解决方案2】:

    documentation for Standard queues中提到的:

    标准队列提供尽力而为的排序,确保消息通常按照发送时的相同顺序传递。

    因此事件的顺序并不能保证,但会大致反映它们从 S3 发送的顺序。

    编辑:您可以使用SentTimestamp in the message attributes 查看消息何时发送到队列,并按此排序。

    【讨论】:

    • 没错,队列不一定会按顺序传递事件,但消息中的排序器是否包含真正的排序,允许我保存事件,并在以后对它们进行排序所有事件都已收到?
    • 编辑了我的答案以包含这个
    • 感谢您的回答,因为它解决了我的问题。但是,我选择后一个答案作为解决方案,因为它告诉我 为什么 以及解决方案,并纠正了我之前误解的音序器的用途。
    • 如果它解决了你的问题,那么这应该被标记为解决方案,但无论如何都可以,很高兴你的问题得到了解决
    • 只能将一个答案标记为解决方案。我选择两者中更相关的一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2016-05-16
    相关资源
    最近更新 更多