【发布时间】:2016-10-09 01:26:03
【问题描述】:
QueueClient.Receive() 以什么顺序传递消息? 我一直在运行一些测试,如果您不完成()它们,我可以看到一些消息(我猜是最上面的消息)会一遍又一遍地传递。 有没有办法强制它以循环方式交付?
【问题讨论】:
标签: azure azureservicebus azure-servicebus-queues
QueueClient.Receive() 以什么顺序传递消息? 我一直在运行一些测试,如果您不完成()它们,我可以看到一些消息(我猜是最上面的消息)会一遍又一遍地传递。 有没有办法强制它以循环方式交付?
【问题讨论】:
标签: azure azureservicebus azure-servicebus-queues
当您有一条消息已传递但未完成时,一旦LockDuration 过期并被再次使用,消息就会出现在队列中。您必须完成消息。如果您不这样做,它最终会进入 DLQ,但在此之前,您的消费者会收到多次。
QueueClient.Receive 获取代理(服务器)上可用的任何内容。我没有遵循循环传递的想法,因为它是一个队列。你会得到队列中的内容。根据经验,我建议不要依赖消息的顺序。
也就是说,有一个 ASB 会话功能可以保存和保证交付的订单。如果您正在寻找会话,之前曾询问过similar question。
【讨论】:
创建QueueClient时可以指定接收模式并将其设置为ReceiveAndDelete:
QueueClient.CreateFromConnectionString(connectionString, path, ReceiveMode.ReceiveAndDelete);
这将使您能够在收到消息后立即将其从队列中删除,而不必调用Complete。
如果您不拨打Complete或使用ReceiveAndDelete,则顺序为:
【讨论】: