0

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

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

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

queueProvider.SendMessage(message);

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

4

2 回答 2

1

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

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

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

于 2012-12-06T10:20:32.293 回答