EventHub Exception :Cannot allocate more handles to the current session or connection

时间:2016-04-25 09:36:41

标签: azureservicebus azure-eventhub

I have C# console application through which I am sending data to event hub frequently.This console application basically read some data from SQL storage and start pushing data to event hub.

This entire program run in endless loop/fashion like in while control whenever it receive any data in SQL it pulls data from there and start sending to Event hub.

But at some moment I got this error.

"Cannot allocate more handles to the current session or connection.The maximum number of handles allowed is 4999.Please free up resources any try again. at Microsoft.ServiceBus.Common......

When I restarted this console application its working fine.But I don't know why I got this error .

Please help me.

Thanks & Regards,

RK

2 个答案:

答案 0 :(得分:11)

TLDR:在'发送到EventHub逻辑'中,确保您正在重复使用(缓存)相同的发件人实例。

为什么

EventHubs旨在支持超大规模的高吞吐量低延迟事件发送系统。因此,我们选择依靠一个非常高性能的协议来进行所有运行时操作 - 即AmqpAmqp Protocol的优点在构建于其上的应用程序充分利用其优势时发挥作用。这就是EventHubs对象模型映射到Amqp工件的方式:

  1. EventHubClient映射到一个AmqpConnection。基数为1:1。如果在创建EventHubClient.CreateFromConnectionString时指定了完全相同的ConnectionString - 底层物理套接字将被共享 - 但是amqp Artifact - AmqpConnection仍然不同。
  2. 每当客户在内部调用EventHubClient.Send(EventData)时,EventHubClient会在{{1}创建的AmqpConnection上创建 1 AmqpSession 并在该会话中 1 AmqpLink }}。只要将相同的EventHubClient实例用于后续发送,就会重新使用此会话和链接。
  3. 每当在EventHubClient上执行任何管理操作时 - 从,mgmt。操作(如getPartitionInfo)始终是请求 - 响应并且需要双向通信 - EventHubClient在该会话中创建 1 AmqpSession 2 AmqpLink - 请求的一个链接&响应的其他链接(例如:想象一下REST EventHubClient调用的结果)
  4. 每当从Get创建任何子实体时 - 例如EventHubClientEventHubSender - EventHubReceiver创建全新的AmqpSession && ; 该会话中的AmqpLink
  5. 使用eventhub SDK的客户端应用程序的主要内容是

    每次创建EventHubClient实例时,都会在下面创建一个真实的物理套接字。

    每次创建EventHubClientEventHubSender实例时,EventHubReceiver创建的套接字将被重复使用并位于其上:  (a)创建AmqpSession - 没有。每个连接的AmqpSessions限制为5k - 我想这是您的客户端应用程序达到上限的限制。  (b)AmqpLink是在Session内部创建的 - 它将在EventHubs服务中触发实体解析(与在现有EventHubClient上发送相比,稍微贵一点)。

    More on Event Hubs.

答案 1 :(得分:0)

现在已解决问题我只创建了用于发送所有消息/事件的事件中心客户端的单个实例,而不是为每个消息/事件创建事件中心客户端实例。