我有一个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队列?
我该怎么做才能提高性能?
谢谢。