2016-10-04 63 views

回答

2

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

QueueClient.Receive获取代理(服务器)上可用的所有内容。我没有遵循循环赛传递的想法,因为它是一个队列。你会得到什么排队。作为一个经验法则,我建议不要依赖消息的顺序

这样说,有一个ASB会话功能可以保留和保证订单的交付。如果你正在寻找会议,之前询问similar question

0

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

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

这将使你尽快从队列中删除该邮件,你收到它,而不必调用Complete

如果你不叫Complete或使用ReceiveAndDelete,顺序将是:

  • 中获取信息(锁定它的X秒)
  • 会按顺序下一条消息(锁定它X秒)
  • 第一个消息锁定已过期,所以您再次获取并重新锁定它。
  • 永远等于第二条消息等等。
+0

然后它会从顶部一遍又一遍地得到一些消息。但有多少呢? –

+0

@GökhanKurt不知道我理解你的问题。 –

+0

我从答案中了解到,它会锁定最顶端的几个并锁定它们(在您的示例中为2)。然后当锁定过期时,它会再次尝试这两个。假设2项只是一个例子,它会锁定和尝试多少?或者它会锁定最上面的一个并等到锁定过期?或者它可能会尝试从顶部的每个项目,直到锁再次从头开始的最顶部的锁到期。 –

相关问题