【发布时间】:2020-08-31 18:00:58
【问题描述】:
我正在利用 Azure SDK 的服务将遥测数据记录到 Azure 事件中心。我的客户端应用程序调用一个 API 端点,该端点实例化 EventHubProducerClient 以将数据记录到事件中心。我正在管理许多 api 调用,并且想知道 EventHubProducerClient 是否可以在多个调用中重复使用,或者我应该在每次调用中使用一个新实例。
【问题讨论】:
标签: azure-eventhub
我正在利用 Azure SDK 的服务将遥测数据记录到 Azure 事件中心。我的客户端应用程序调用一个 API 端点,该端点实例化 EventHubProducerClient 以将数据记录到事件中心。我正在管理许多 api 调用,并且想知道 EventHubProducerClient 是否可以在多个调用中重复使用,或者我应该在每次调用中使用一个新实例。
【问题讨论】:
标签: azure-eventhub
是的。 EventHubProducerClient 在应用程序的生命周期内可以安全地缓存和使用,这是在应用程序定期或半定期发布事件时使用的最佳实践。在内部,生产者将管理其底层资源,并透明地尝试在不活动期间保持资源使用率较低,并在使用率较高期间管理其健康状况。
在您的应用程序关闭时调用其CloseAsync 方法将确保正确清理网络资源和其他非托管对象。
旁注:EventHubProducerClient 的一个常见问题是,如果可以安全地视为长寿命,它为什么要实现 IAsyncDisposable。这样做的部分原因是为了在发布非常少且资源是应用程序关注的情况下方便,部分原因是为了模仿HttpClient 的模式。
【讨论】:
IAsyncDisposable,许多代码示例只是演示了内联使用它,这具有巨大的性能成本(在 HTTP 请求上,添加 100-如果不缓存生产者,则为 200 毫秒)。
AddEventHubProducerClient。这会将生产者注册为 Singleton 并确保处理得到妥善处理。 (这是它支持 IAsyncDisposable 的另一个原因)