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

将消息重新发送回Azure队列是否存在任何问题,azure,message,azure-worker-roles,azure-queues,Azure,Message,Azure Worker Roles,Azure Queues,我在Azure中有一个调度程序和一些工作人员。调度器将消息放入队列,工作人员提取这些消息并处理它们。我现在进入了一个场景,一旦达到某个阈值,我需要将一些数据从表存储移到数据库中。这些项目需要按顺序处理,首先是最旧的项目。一旦达到该阈值,所有其他项目将按顺序处理。触发传输的当前消息需要填充在行的末尾并重新处理 所以,我的问题的核心是 只需按原样将消息重新发送到队列就可以了,还是有可能导致问题 queueProvider.SendMessage(message); 一位同事提到他“虽然他可能读过一

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

所以,我的问题的核心是

只需按原样将消息重新发送到队列就可以了,还是有可能导致问题

queueProvider.SendMessage(message);

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

简单的回答是,这很好。如果您有CloudQueueMessage,您可以将其发送到任何队列(这只是一天结束时的一个REST请求)。每次添加message()时,它都会创建一个新ID(可能是相同的pop收据,但这并不重要)。也就是说,有些事情你可能需要处理和/或调查:

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

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