输出到ServiceBus时减少Azure HTTPTrigger函数的平均响应时间

时间:2019-02-26 08:46:36

标签: azure asynchronous queue task servicebus

我有一个POST Azure函数,其唯一目的是接收一些有效负载, 并将其从ServiceBus命名空间存储到ServiceBus队列中。

下面提供的所有代码都可以正常工作,并且工作起来并不复杂;但是,根据所使用的版本,可以获得不同的平均响应时间。

我制作了一个WebTest,用于LoadTest来获取这些平均值。在以下配置下的响应时间:1个JSON负载,1个并发用户,20秒的预热时间,测试时间=> 3分钟。

我想提到的是,对于WebTest,我必须使用TLS插件。

版本1 :(使用此版本,LoadTest的平均响应时间约为500毫秒)

[FunctionName("DataCreate")]
public static async Task<HttpResponseMessage> CreateData([HttpTrigger(AuthorizationLevel.Function, "post", Route = AppRoutes.CreateDataRoute)]HttpRequestMessage req,
                                                                                         [ServiceBus(queueOrTopicName: "MyServiceBusQueue", Connection = "sbconnection", EntityType = EntityType.Queue)] IAsyncCollector<String> dataCollector,
                                                                                          ExecutionContext context,
                                                                                          TraceWriter log)
{

    try
    {

        var requestBody = await req.Content.ReadAsStringAsync();

        await dataCollector.AddAsync(requestBody);

        return req.CreateResponse(HttpStatusCode.OK);

    }
    catch (JsonException jsonException) {
        return ErrorHandler.HandleDataFormatError(req, log, jsonException);
    }
    catch (Exception e)
    {
        return ErrorHandler.HandleFatalError(req, log, e);
    }
}

版本2 :(此版本的平均响应时间约为1.5秒

[FunctionName("DataCreate")]
public static async Task<HttpResponseMessage> CreateData([HttpTrigger(AuthorizationLevel.Function, "post", Route = AppRoutes.CreateDataRoute)]HttpRequestMessage req, ExecutionContext context, TraceWriter log)
{
    try
    {
        var requestBody = await req.Content.ReadAsStringAsync();

        var message = new BrokeredMessage(requestBody);

        QueueClient queueClient = QueueClient.CreateFromConnectionString(ConfigurationManager.AppSettings["sbconnection"], "MyServiceBusQueue");

        await queueClient.SendAsync(message);

        return req.CreateResponse(HttpStatusCode.OK);

    }
    catch (JsonException jsonException) {
        return ErrorHandler.HandleDataFormatError(req, log, jsonException);
    }
    catch (Exception e)
    {
        return ErrorHandler.HandleFatalError(req, log, e);
    }

}

版本3 :(此版本的平均响应时间约为1秒)

[FunctionName("DataCreate")]
[return: ServiceBus("MyServiceBusQueue", Connection = "sbconnection")]
public static async Task<String> CreateData([HttpTrigger(AuthorizationLevel.Function, "post", Route = AppRoutes.CreateDataRoute)]HttpRequestMessage req, ExecutionContext context, TraceWriter log)
{
    var requestBody = await req.Content.ReadAsStringAsync();
    return requestBody;
}

我希望平均响应时间保持一致,约为100毫秒左右,或者可能更高一些,但绝对不会达到500毫秒或更长。

这些是预期的平均值吗?响应时间(假设该函数实际上只做很少的事情),仅通过请求内容接收一些数据并将其发送到ServiceBus队列?

我该怎么做才能提高性能?

谢谢。

0 个答案:

没有答案