在尝试向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
答案 0 :(得分:3)
根据您提到的execption表示用户启动的操作花费的时间比操作超时长。我的解决方法是你可以增加OperationTimeout或重试计数。
增加超时的演示代码
var builder = new ServiceBusConnectionStringBuilder("connection string")
{
TransportType = TransportType.Amqp,
OperationTimeout = TimeSpan.FromSeconds(90)
};
messagingFactory = MessagingFactory.CreateFromConnectionString(builder.ToString());
有关您引用此document的超时异常的详细信息。
常见原因
此错误有两个常见原因:配置错误或瞬态服务错误。
配置错误操作超时可能对操作条件而言太小。客户端SDK中操作超时的默认值为 60秒。检查您的代码是否将值设置为太小。请注意,网络状况和CPU使用率会影响特定操作完成所需的时间,因此操作超时不应设置为非常小的值。
暂时性服务错误有时,事件中心服务可能会遇到处理请求的延迟;例如,在高流量期间。在这种情况下,您可以在延迟后重试操作,直到操作成功。如果多次尝试后相同的操作仍然失败,请访问Azure服务状态站点以查看是否存在任何已知的服务中断。