将消息重新发送回Azure队列是否有任何问题

时间:2012-04-10 16:52:12

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

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

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

是否可以简单地将消息重新发送到队列中,或者是否有可能导致问题?

queueProvider.SendMessage(message);

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

2 个答案:

答案 0 :(得分:1)

简短的回答是它很好。如果你有一个CloudQueueMessage,你可以将它发送到任何队列(它只是一天结束时的REST请求)。每次你使用AddMessage()时,它都会创建一个新的ID(可能是同一个pop收据,但这无关紧要)。话虽如此,有些事情你可能想要照顾或调查:

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

答案 1 :(得分:-1)

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