QueueClient.Receive()传递的消息顺序是什么

时间:2016-10-04 09:15:46

标签: azure azureservicebus azure-servicebus-queues

QueueClient.Receive()以什么顺序传递消息? 我一直在进行一些测试,如果你没有完成(),我可以看到一些消息(我猜的最顶层的消息)一遍又一遍地传递。 有没有办法强制它以循环方式交付?

2 个答案:

答案 0 :(得分:2)

如果您有一条已发送但尚未完成的消息,则在LockDuration到期后消息将显示在队列中并再次消耗。您来完成邮件。如果不这样做,它最终将进入DLQ,但在此之前,您的消费者将多次收到它。

QueueClient.Receive获取代理(服务器)上可用的任何内容。我不遵循Round Robin交付的想法,因为它是一个队列。你得到了队列中的内容。根据经验,我建议不要依赖消息的顺序

说,有一个ASB会话功能可以保留和保证有序的传递。如果您正在寻找会话,之前会询问similar question

答案 1 :(得分:0)

创建QueueClient时,您可以指定接收模式并将其设置为ReceiveAndDelete

QueueClient.CreateFromConnectionString(connectionString, path, ReceiveMode.ReceiveAndDelete);

这样,您就可以在收到邮件后立即将其从队列中删除,而无需拨打Complete

如果您不致电Complete或使用ReceiveAndDelete,订单将为:

  • 收到消息(锁定X秒)
  • 按顺序获取下一条消息(将其锁定X秒)
  • 第一个消息锁已过期,因此您再次获取并重新锁定它。
  • 第二条消息相同,依此类推。