如何重用QueueClient实例以从Azure Function发送响应消息?

时间:2017-11-08 00:18:56

标签: azure azure-functions azure-servicebus-queues azure-functions-runtime

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时间减少到50ms以便以后调用。但是,静态引用似乎不是重用QueueClient连接的可靠方法,因为我不知道何时关闭它。

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

2 个答案:

答案 0 :(得分:2)

我认为这里的挑战是Azure功能并不知道你什么时候做完"发送消息。如果你的函数已经闲置了一段时间,我们可能会删除实例,但我不相信在函数中执行静态QueueClient没有明确关闭它有任何缺点 - 这将是一个最佳实践。

答案 1 :(得分:1)

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

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