据我所知,MS Azure队列服务文档http://msdn.microsoft.com/en-us/library/windowsazure/dd179363.aspx说先出(FIFO)行为不能保证。如何保证azure队列FIFO
但是,我们的应用程序是这样的,所有的消息都被读取和FIFO顺序进行处理。任何人都可以请建议如何使用Azure队列服务实现保证FIFO?
谢谢。
据我所知,MS Azure队列服务文档http://msdn.microsoft.com/en-us/library/windowsazure/dd179363.aspx说先出(FIFO)行为不能保证。如何保证azure队列FIFO
但是,我们的应用程序是这样的,所有的消息都被读取和FIFO顺序进行处理。任何人都可以请建议如何使用Azure队列服务实现保证FIFO?
谢谢。
最新服务总线版本提供了可靠的消息队列:Queues, topics and subscriptions
添加到@RichBower答案......看看这个...... Azure存储队列对Azure的服务总线队列
http://msdn.microsoft.com/en-us/library/windowsazure/hh767287.aspx
如上所述https://www.jayway.com/2013/12/20/message-ordering-on-windows-azure-service-bus-queues/在服务总线中也不能保证订货,除了使用有风险的接收和删除模式外
您只需要遵循bel流步骤,以确保消息排序:
1)启用=假会话创建队列。 2)虽然在队列中保存消息,提供会话ID等如下: -
var message = new BrokeredMessage(item);
message.SessionId = "LB";
Console.WriteLine("Response from Central Scoring System : " + item);
client.Send(message);
3)尽管为了恢复消息创建接收器: -
queueClient.OnMessage(s =>
{
var body = s.GetBody<string>();
var messageId = s.MessageId;
Console.WriteLine("Message Body:" + body);
Console.WriteLine("Message Id:" + messageId);
});
4)虽然具有相同的会话ID它会自动确保订单并提供订购的消息。
谢谢!
我不知道你想如何快速处理这些消息,但如果你需要有一个真正的FIFO,不允许Azure的队列同时得到一个以上的消息。
在函数顶部的“program.cs”中使用它。
static void Main()
{
var config = new JobHostConfiguration();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
config.Queues.BatchSize = 1; //Number of messages to dequeue at the same time.
config.Queues.MaxPollingInterval = TimeSpan.FromMilliseconds(100); //Pooling request to the queue.
JobHost host = new JobHost(config);
....your initial information...
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
这会在100毫秒的等待一段时间得到一个消息。
这是一个记录器webjob工作完全写入文件traze信息。
的docs说的Azure存储队列是:
消息在存储队列通常是先入先出,但有时他们能进能出的顺序;例如,当消息的可见性超时持续时间到期(例如,由于 客户机应用程序在处理期间崩溃)。当可见性 超时过期时,消息在队列上再次变为可见,以供另一个工作人员将其出列。此时,最近可见的消息 可能会放在队列中(要再次出队),该消息在最初排队后的消息 之后。
也许这对你来说足够好了?否则使用服务总线。
Thinks Richrdbower –
不幸的是,这似乎正在回答OP提出的问题。 Azure服务总线与Azure队列服务不同 –