【问题标题】:Is there any issue with resending a message back to the Azure queue将消息重新发送回 Azure 队列是否有任何问题
【发布时间】:2012-04-10 16:52:12
【问题描述】:

我在 Azure 中有一个调度程序和一些工作人员。调度程序将消息放入队列中,工作人员提取这些消息并对其进行处理。我现在刚刚遇到一个场景,一旦达到某个阈值,我需要将一些数据从表存储移动到我们的数据库。这些项目需要按顺序处理,最早的在前。一旦达到该阈值,所有其他项目都会按顺序处理。触发传输的当前消息需要填充在行尾并重新处理。

所以,我的问题的实质......

是否可以简单地将消息按原样重新发送到队列,还是有可能导致问题?

queueProvider.SendMessage(message);

一位同事提到他“虽然他可能读过一些关于需要做一些特别的事情的文章。”但是我还没有看到任何可以证实他的怀疑的东西,所以我想我会摆姿势这里的问题只是为了安全。

【问题讨论】:

    标签: azure message azure-worker-roles azure-queues


    【解决方案1】:

    简短的回答是没问题。如果你有一个 CloudQueueMessage,你可以将它发送到任何队列(这只是一天结束时的 REST 请求)。每次您 AddMessage() 时,它都会创建一个新 ID(可能是相同的弹出收据,但没关系)。话虽如此,您可能需要注意和/或调查一些事情:

    1. 如果您将消息推送到一个队列,弹出它,然后推送到另一个队列或同一个队列,您可能应该从队列中删除第一条消息。仅仅弹出它意味着您已经设置了隐身超时,但它很快就会重新出现(并且您现在每个队列上都有相同的消息内容)。因此,如果我弹出一条消息并立即再次推送它,我现在在队列中有 2 条内容相同的消息。
    2. 您现在可以更新消息。如果您需要订购,这可能适合您。您可以在元数据或内容中指明消息本身处于哪个处理阶段,并通过周到的实施在此处获得一些排序。

    【讨论】:

      【解决方案2】:

      建议队列消费者内部的所有逻辑都是幂等的,因为一条消息实际上可以被多次提取。我们必须记住,队列服务保证消息将被传递,至少一次 - 因此您最终可能会使用这种方法复制消息。

      【讨论】:

        猜你喜欢
        • 2014-01-28
        • 2017-12-30
        • 1970-01-01
        • 2022-12-19
        • 2019-11-08
        • 2022-11-04
        • 1970-01-01
        • 2012-07-11
        • 2014-08-30
        相关资源
        最近更新 更多