【问题标题】:Where do Azure Queue Storage Messages go?Azure 队列存储消息在哪里?
【发布时间】:2021-07-29 23:25:53
【问题描述】:

我刚刚了解队列存储消息触发的 Azure Functions。我能够生成消息并触发函数,但是一旦函数 ack 得到消息,消息会去哪里?

他们只是从队列中消失了。

  • 如果我想重新处理它们怎么办?
  • 这是如何实现的?

理想情况下,我想告诉队列何时将消息“出列”,而不是以某种方式自动处理。

【问题讨论】:

  • 如果队列中有消费者,一旦消息发布到它,它会自动将消息出列。即它将消耗它进行处理(或消费者用它做什么)
  • 有没有办法停止自动出队?即使消费者在下游失败,消息也会从队列中删除。我想保留消息直到验证处理完成,然后向存储队列发送出队信号。

标签: azure-functions messaging azure-storage-queues


【解决方案1】:

我能够生成消息并触发函数,但是在哪里执行 一旦 Function ack 得到消息,消息就会消失?

当函数被调用时,一条消息从队列中出列。作为出队过程的一部分,消息在一定时间内变得不可见(通过可见性超时持续时间指定)。这是必需的,以便在任何给定时间点只有一个消费者处理消息。

如果函数能够成功处理消息,它将被自动删除。你无法真正控制这种行为。

如果函数无法处理消息,则消息将在可见性超时期限到期后重新出现在队列中,并被另一个函数实例再次拾取。

一旦一条消息被重试“n”次并且结果始终不成功,Function 会将消息放入一个死信/毒药队列中,我相信该队列的名称类似于<yourqueuename>-poison

【讨论】:

  • @GuaravMantri,当你说If the Function is able to process the message successfully, it will be automatically deleted.时,什么是“成功处理消息”?如果函数确认/接受/接受消息,则似乎该消息被删除。但是,如果函数在此之后失败(状态 500 等),或者如果下游进程失败,则消息将永远消失。我们如何将消息持久保存到过程中的某个点?例如:在 blob 被完全处理后,将消息出列。
  • If the Function acknowledges/accepts/takes the message it seems the message is then deleted - 不应该是这样。仅当函数成功完成其处理时才删除该消息。如果函数抛出异常,则消息再次入队。
  • 好的。谢谢你的澄清。我必须想办法在 App Insights/Log Analytics 中查看它。再举一个例子:假设函数没有抛出异常,但是下游的一个进程失败了,队列消息需要再次入队。是否有一种模式可以保留队列消息以供以后重播?
  • Lets say the Function throws no exception, but a process further downstream fails and the Queue Message needs to be enqueued again. Is there a pattern for persisting queue messages for replay later? - 我不确定我是否理解。我可以建议您更新您的问题并提供所有必要的详细信息,或者提出一个包含所有这些详细信息的新问题。恕我直言,cmets 不适合讨论这些问题。
猜你喜欢
  • 2013-02-13
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2016-02-22
  • 2019-04-18
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多