【问题标题】:Performance issue on Service bus queue服务总线队列的性能问题
【发布时间】:2020-09-09 07:37:12
【问题描述】:

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

var message = new Message(body);

var result = await queueClient.SendAsync(messageOne)

我遇到了性能问题,有什么办法可以优化代码吗?

附: - 我新加入了我的公司,并且是 Azure 的新手。

【问题讨论】:

    标签: azure azureservicebus


    【解决方案1】:

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

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

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

    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
        });
    

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2015-07-18
      • 2019-02-12
      • 2012-04-12
      相关资源
      最近更新 更多