gpt4 book ai didi

amazon-web-services - Amazon SQS 消息多重传送

转载 作者:行者123 更新时间:2023-12-03 10:16:45 27 4
gpt4 key购买 nike

我知道为了带来巨大的可扩展性和可靠性,SQS 对资源进行了广泛的并行化。它甚至为小队列使用冗余服务器,甚至发布到队列的消息也被冗余存储为多个副本。这些是阻止它像 RabbitMQ 那样只交付一次的因素。我什至看到已发送的已删除邮件。

对开发人员的影响是他们需要为多次传递消息做好准备。亚马逊声称这不是问题,但确实如此,那么开发人员必须使用一些同步结构,如数据库事务锁或 dynamo-db 条件写入。这两者都会降低可扩展性。

问题是,

针对重复投递问题,如何 message-invisible-period 功能保持?不保证该消息不可见。如果开发者必须自己安排同步,隐身期有什么好处。我已经看到消息被重新传递,即使它们应该是不可见的。

编辑

在这里我包括一些引用

  • What is a good practice to achieve the "Exactly-once delivery" behavior with Amazon SQS?
  • http://aws.amazon.com/sqs/faqs/#How_many_times_will_I_receive_each_message
  • http://aws.amazon.com/sqs/faqs/#How_does_Amazon_SQS_allow_multiple_readers_to_access_the_same_message_queue_without_losing_messages_or_processing_them_many_times
  • http://aws.amazon.com/sqs/faqs/#Can_a_deleted_message_be_received_again
  • 最佳答案

    消息不可见性解决了与保证一次且仅一次传递不同的问题。考虑对队列中的项目进行长时间运行的操作。如果处理器在操作过程中出错,您不想删除该消息,而是希望它重新出现并由不同的处理器再次处理。

    所以模式是...

  • 将项目写入(插入)队列
  • 查看(查看)队列中的项目
  • 标记项目不可见
  • 对项目执行流程
  • 写结果
  • 从队列中删除(弹出)项目

  • 所以不管你有没有重复投递,你仍然需要确保你处理了队列中的项目。如果您将其从队列中拉出时将其删除,然后您的服务器死机,您可能会永远丢失该消息。它通过使用 Spot 实例实现了积极的扩展 - 并保证(使用上述模式),您不会丢失消息。

    但是 - 它不保证一次且仅一次交付。但我不认为它是为这个问题设计的。我也不认为这是一个不可逾越的问题。在我们的案例中(我可以理解为什么我以前从未注意到这些问题) - 我们正在将结果写入 S3。如果它用相同的数据覆盖相同的文件,这没什么大不了的。当然,如果是向银行 a/c 进行的借记交易,您可能需要某种关联 ID……而大多数系统已经在其中提供了这些 ID。因此,如果您获得重复的相关值,则会抛出异常并继续。

    好问题。为我突出了一些东西。

    关于amazon-web-services - Amazon SQS 消息多重传送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18566412/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com