[英]Azure Event Hub timeouts
在尝试向Azure事件中心发送消息时,偶尔会在事件中心客户端中看到超时错误。 看起来客户端达到了资源限制,但我不确定......这里代码:
MessagingFactory messagingFactory = null;
EventHubClient hubClient = null;
try
{
messagingFactory = MessagingFactory.CreateFromConnectionString(this.connectionString);
hubClient = messagingFactory.CreateEventHubClient(this.configurationManager.EventHubName);
var batchIterator = new EventBatchIterator<T>(events);
foreach (var batch in batchIterator)
{
await hubClient.SendBatchAsync(batch);
}
}
catch (Exception e)
{
this.logger.Error("An error occurred during sent messages to event hub", e);
}
finally
{
if (hubClient != null)
{
await hubClient.CloseAsync();
}
if (messagingFactory != null)
{
await messagingFactory.CloseAsync();
}
}
例外情况是:
与'N / A'通信时发生错误。 检查连接信息,然后重试。 Microsoft.ServiceBus.Messaging.MessagingCommunicationException
连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应System.Net.Sockets.SocketException
根据您提到的execption表示用户启动的操作所花费的时间比操作超时时间长。 我的解决方法是您可以增加OperationTimeout或重试计数。
用于增加超时的演示代码
var builder = new ServiceBusConnectionStringBuilder("connection string")
{
TransportType = TransportType.Amqp,
OperationTimeout = TimeSpan.FromSeconds(90)
};
messagingFactory = MessagingFactory.CreateFromConnectionString(builder.ToString());
有关Timeout异常的更多信息,请参阅此文档 。
常见原因
导致此错误的原因有两个:配置错误或瞬态服务错误。
配置错误操作超时可能对于操作条件而言太小。 客户端SDK中操作超时的默认值为60秒 。 检查您的代码是否将值设置为太小。 请注意,网络状况和CPU使用率会影响特定操作完成所需的时间,因此不应将操作超时设置为非常小的值。
瞬态服务错误有时,事件中心服务可能会遇到处理请求的延迟; 例如,在高流量期间。 在这种情况下,您可以在延迟后重试操作,直到操作成功。 如果多次尝试后相同的操作仍然失败,请访问Azure服务状态站点以查看是否存在任何已知的服务中断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.