Azure 服务总线队列:消息的排序如何工作?

Azure Service Bus Queue: How the ordering of the message work?

public static async Task DoMessage()
    {
        const int numberOfMessages = 10;

        queueClient = new QueueClient(ConnectionString, QueueName);

        await SendMessageAsync(numberOfMessages);

        await queueClient.CloseAsync();
    }

    private static async Task SendMessageAsync(int numOfMessages)
    {
        try 
        { 
            for (var i = 0; i < numOfMessages; i++)
            {
                var messageBody = $"Message {i}";
                var message = new Message(Encoding.UTF8.GetBytes(messageBody));
                message.SessionId = i.ToString();
                await queueClient.SendAsync(message);
            }


        }
        catch (Exception e)
        {

        }
    }

这是我使用会话 ID 将消息发送到服务总线队列的示例代码。

我的问题是如果调用DoMessage 函数2 次:我们分别将其命名为MessageSet1 和MessageSet2。 MessageSet2 是否会由处理消息接收端的接收天蓝色函数接收和处理。

我想按 MessageSet1 然后 MessageSet2 的顺序处理,除非 MessageSet1 完成,否则从不处理 MessageSet2。

您的操作存在一些问题。

首先,Azure Functions 目前不支持会话。您可以跟踪 issue

其次,您正在创建的会话已关闭。会话应应用于使用相同 SessionId 的一组消息。这意味着您的 for 循环应该将相同的 SessionId 分配给集合中的所有消息。像这样:

private static async Task SendMessageAsync(int numOfMessages, string sessionID)
{
    try 
    { 
        var tasks = new List<Task>();
        for (var i = 0; i < numOfMessages; i++)
        {
            var messageBody = $"Message {i}";
            var message = new Message(Encoding.UTF8.GetBytes(messageBody));
            message.SessionId = sessionId;
            tasks.Add(queueClient.SendAsync(message));
        }
        await Task.WhenAll(tasks).ConfigureAwait(false);
    }
    catch (Exception e)
    {
       // handle exception
    }
}

对于使用 Sessions 的有序消息,请参阅文档 here