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运行时是否可以提供可以可靠地关闭队列客户端的任何事件?
答案 0 :(得分:2)
我认为这里的挑战是Azure功能并不知道你什么时候做完"发送消息。如果你的函数已经闲置了一段时间,我们可能会删除实例,但我不相信在函数中执行静态QueueClient没有明确关闭它有任何缺点 - 这将是一个最佳实践。
答案 1 :(得分:1)
我建议您切换到Service Bus输出绑定,而不是使用QueueClient
手动发送消息。这样运行时将为您管理QueueClient
的实例及其配置。请参阅Azure Functions Service Bus bindings,“服务总线输出绑定”部分。
否则,@ jeffhollan建议的静态QueueClient
是可行的选择。