如何使Azure Service Bus以FIFO方式工作?

时间:2018-11-14 11:22:26

标签: c# azure azureservicebus azure-webjobs

我们没有使用Azure Service Bus的主题(据我了解has additional requirements to support ordering,我的理解是每个队列都应恢复为以FIFO方式运行;但是,从今天的分析日志来看,我们15442条消息中的384条以与入队时不同的顺序出队

为了举例说明,我们有两个消息,d4350a6e68ad4c9fb1fb9ccebd766590和0e19fbd29ffd4c4693fff6dd57e4f683;这些分别在2018-11-14 09:27:31.8870000和2018-11-14 09:27:35.5950000入队(所以0e ...比d4晚4ish秒...)但是,它们在2018- 11-14 09:30:12.0320000和2018-11-14 09:29:57.4850000(所以d4 ...比0e晚15ish秒)。在此时间范围内,我们只有一个主机在同时进行入队和出队。

从人的角度来看,这样做的时机相对较近,我们已经看到

当我理解队列是队列时,我对这种行为感到有些惊讶-我是否需要做任何额外的魔术以确保按入队顺序出队? / p>

作为参考,排队的代码有点像:

var brokeredMessage = new BrokeredMessage(objectToQueue, new DataContractJsonSerializer(typeof(T)));            

var queueClient = QueueClient.CreateFromConnectionString(connectionString);
queueClient.RetryPolicy = new RetryExponential(TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(5), 5);
queueClient.Send(brokeredMessage);

并且我们正在使用服务总线触发器使Azure Webjob出队

1 个答案:

答案 0 :(得分:1)

这是预期的行为。为确保按顺序处理消息,应使用Sessions in Service Bus Queues

这将使您可以按照将消息放入队列的顺序来处理消息。