4

Azure 文档中的最佳实践文章建议重新使用 QueueClient 发送多条消息以获得更快的性能。 https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-performance-improvements#reusing-factories-and-clients

我有一个请求-响应消息传递的场景,其中 Azure 函数在被服务总线队列触发器(这是一条请求消息)触发后发送响应。如果我每次执行该函数时都创建一个新的 QueueClient,则 QueueClient.SendAsync 的性能很慢(1.5 到 3 秒)。

如果我在静态变量中重用 QueueClient,则 SendAsync 时间减少到 50 毫秒以供以后调用。但是,静态引用似乎不是重用 QueueClient 连接的可靠方式,因为我不知道何时关闭它。

是否有一种可靠的方法来重用然后在多个函数执行中关闭 QueueClient?Azure-Function 运行时是否可以提供我可以可靠地关闭队列客户端的任何事件?

4

2 回答 2

3

我认为这里的挑战是 Azure 函数不知道您何时“完成”发送消息。如果您的函数闲置了一段时间,我们可能会删除实例,但我认为在函数中执行静态 QueueClient 而不明确关闭它没有任何不利之处——这将是最佳实践。

于 2017-11-08T03:25:04.217 回答
2

我建议您切换到服务总线输出绑定,而不是使用QueueClient. 这样,运行时将为QueueClient您管理实例及其配置。请参阅Azure Functions 服务总线绑定,“服务总线输出绑定”部分。

否则,QueueClient@jeffhollan 建议的静态是一个可行的选择。

于 2017-11-08T07:58:37.943 回答