使用 Azure JS SDK for Service Bus 时需要关闭连接吗?

Posted

技术标签:

【中文标题】使用 Azure JS SDK for Service Bus 时需要关闭连接吗?【英文标题】:Closing connection when using Azure JS SDK for Service Bus is needed? 【发布时间】:2021-07-10 00:26:19 【问题描述】:

如果在我的服务器端应用程序中,每次,通常是每个传入的 HTTP 请求一次或几次,我打开一个新连接 New ServiceBusClient(connStr) 并开始使用它并且不调用 close 方法,是否有任何缺点最后?

可能会导致端口或内存耗尽,或者New ServiceBusClient(connStr) 会在下面使用某种连接池,所以不用担心?

【问题讨论】:

【参考方案1】:

我认为你需要在最后调用close方法,否则会导致你提到的问题。

在官方doc中也是如此。

async function main() 
const sbClient = new ServiceBusClient(connectionString);
.....

 finally 
        await sbClient.close();
    

【讨论】:

你的猜测有参考吗?我知道关闭它会更安全,但问题是“必须关闭”还是“关闭会更好/更安全”? @mehran 不,但我认为这是我们经常做的正常事情,你的意思是“必须”吗?我认为世界上没有我们“必须”做的事情,当然你可以选择不关闭它,但我认为它会导致内存耗尽。如果我们已经有了更好的选择,为什么还要考虑更差的选择?【参考方案2】:

不,没有连接池。每次创建ServiceBusClient 的实例时,都会创建一个底层连接。当客户端不再使用时,最好拨打close()

https://github.com/Azure/azure-sdk-for-js/blob/ab566082fd5182903cc2144efbbf3c197c3e6f6a/sdk/servicebus/service-bus/src/serviceBusClient.ts#L78-L96

【讨论】:

以上是关于使用 Azure JS SDK for Service Bus 时需要关闭连接吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Azure SDK for .NET 获取 Azure 资源 SKU

如何让我的消费者使用 Azure sdk for Golang v0.3.1 监听 Azure 服务总线上的消息?

使用 Azure.ServiceBus.Messaging C# SDK for SAS 令牌的服务总线连接字符串

如何使用 Azure SDK for Python 更改 Office 365 用户头像

反序列化从 node.js (azure sdk) 发送的 Azure ServiceBus 队列消息时出错

Azure SDK for .NET 中基于任务的 API 中的并发性