服务总线队列的性能问题

Performance issue on Service bus queue

我每秒有大量消息发送到我的服务总线队列。我正在使用以下代码发送消息:

var message = new Message(body);

var result = await queueClient.SendAsync(messageOne)

我遇到了性能问题,我可以做些什么来优化代码吗?

P.S。 - 我刚加入公司,刚接触 Azure。

您可以参考 this 文档来优化您的代码。

执行操作(发送、接收、删除等)需要一些时间。除了请求和响应的延迟之外,此时间还包括服务总线服务对操作的处理。要增加每次操作的数量,操作必须并发执行。

客户端通过执行异步操作来调度并发操作。下一个请求在上一个请求完成之前开始。以下代码片段是异步发送操作的示例:

var messageOne = new Message(body);
var messageTwo = new Message(body);

var sendFirstMessageTask =
    queueClient.SendAsync(messageOne).ContinueWith(_ =>
    {
        Console.WriteLine("Sent message #1");
    });
var sendSecondMessageTask =
    queueClient.SendAsync(messageTwo).ContinueWith(_ =>
    {
        Console.WriteLine("Sent message #2");
    });

await Task.WhenAll(sendFirstMessageTask, sendSecondMessageTask);
Console.WriteLine("All messages sent");

以下代码是异步接收操作的示例。

var receiver = new MessageReceiver(connectionString, queueName, ReceiveMode.PeekLock);

static Task LogErrorAsync(Exception exception)
{
    Console.WriteLine(exception);
    return Task.CompletedTask;
};

receiver.RegisterMessageHandler(
    async (message, cancellationToken) =>
    {
        Console.WriteLine("Handle message");
        await receiver.CompleteAsync(message.SystemProperties.LockToken);
    },
    new MessageHandlerOptions(e => LogErrorAsync(e.Exception))
    {
        AutoComplete = false,
        MaxConcurrentCalls = 20
    });