使用 .Net 核心应用程序发送到 EventHubs 时如何优化吞吐量

Posted

技术标签:

【中文标题】使用 .Net 核心应用程序发送到 EventHubs 时如何优化吞吐量【英文标题】:How to optimize throughput when sending to EventHubs with .Net core app 【发布时间】:2018-05-26 05:15:31 【问题描述】:

如何创建多个使用多个底层 TCP 连接的 EventHubClients 以允许从 .net 核心 Web 应用程序快速写入 EventHubs?

在 EventHubs (https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-programming-guide) 的编程指南中写道:

请务必注意,从消息传递工厂实例创建的其他 EventHubClient 对象会重用相同的底层 TCP 连接。因此,这些对象对吞吐量有客户端限制。 Create 方法重用单个消息传递工厂。如果您需要来自单个发送方的非常高的吞吐量,那么您可以从每个消息传递工厂创建多个消息工厂和一个 EventHubClient 对象。

然后他们有一个代码示例:

var factory = MessagingFactory.CreateFromConnectionString("your_connection_string");
var client = factory.CreateEventHubClient("MyEventHub");

但是,我不知道 .Net 核心中哪里/是否有 MessagingFactory?是否有可能从.Net核心做到这一点?我查看了 Microsoft.Azure.ServiceBus 但找不到任何内容。

【问题讨论】:

【参考方案1】:

经过测试,使用EventHubClient.CreateFromConnectionString 创建多个客户端似乎会像预期的那样打开到 EventHubs 的多个连接。 (这些连接在 Windows 资源监视器中可以看作是单独的 TCP 连接)。

(当我仔细重新阅读文档时,我认为它仅适用于从 MessaginFactory 创建的 EventHubClients,这在我第一次阅读时并不清楚。但我将其添加为答案并让问题保留以防其他人阅读像我一开始做的文档)

【讨论】:

MessagingFactory 在 Microsoft.Azure.EventHubs 库中不可用。您知道是否有另一种方法可以在创建 eventthub 客户端时尝试重用底层 TCP 连接,因为它不可用? —— 我不知道。

以上是关于使用 .Net 核心应用程序发送到 EventHubs 时如何优化吞吐量的主要内容,如果未能解决你的问题,请参考以下文章

如何将简单值从 axios.post 发送到 asp.net 核心?

使用 .NET 核心设置内存限制

text 从angular发送表单到.net核心

如何从 Asp.net 核心向 Flutter 应用发送推送通知

如何配置 .net 核心以将身份验证 cookie 发送到不同的域

text 将文件从Angular发送到.net核心api控制器