을 사용하여 EventHub에 데이터를 보내는 경우 NullReferenceException
짧은 버전이 표시됩니다. 연결이 끊어지는 이유는 무엇입니까?Azure EventHub - NullReferenceException의 EventHubClient.Send() 결과가
긴 설명 :
나는 C#에서 EventHubClient
클래스에서 SendBatch
방법을 사용하여 EventHub
로 데이터를 전송하기 위해 노력하고있어. (https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.eventhubclient)
일괄 처리 크기는 100json 개체이므로 너무 커서는 안됩니다. 더 큰 크기와 더 작은 배치 크기 모두에서 동일한 문제가 발생했습니다. 또한 객체를 하나씩 보내려면 Send()
을 사용해 보았습니다. 같은 결과.
이 시간의 큰 99 %를 작동하지만, 때때로 다음과 같은 스택 추적 남겨두고 NullReferenceException
결과 : 나는 두 EventHubClient.RetryPolicy = RetryPolicy.Default;
를 사용하여 수동으로 수행하여 재시도 정책을 구현하기 위해 노력했습니다
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.ServiceBus.Messaging.MessageSender.RetrySenderEventDataAsyncResu
lt.<>c.<.ctor>b__5_0(EventData e)
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate
)
at Microsoft.ServiceBus.Messaging.MessageSender.RetrySenderEventDataAsyncResu
lt..ctor(MessageSender sender, TrackingContext trackingContext, IEnumerable`1 me
ssages, TimeSpan timeout, AsyncCallback callback, Object state)
at Microsoft.ServiceBus.Messaging.MessageSender.BeginSendEventData(TrackingCo
ntext trackingContext, IEnumerable`1 eventDatas, TimeSpan timeout, AsyncCallback
callback, Object state)
at Microsoft.ServiceBus.Messaging.EventHubClient.SendBatch(IEnumerable`1 even
tDataList)
을 연결 시간을 다시 설정하려면 재귀 메서드 호출을 Thread.Sleep(n)
과 함께 사용합니다.
가끔씩 연결은 10 초 후, 때로는 60 초 후로 바뀌며 대개는 절대 사용하지 않습니다. (또는 메서드의 재귀 호출이 StackOverflowException
에 도달 할 때까지 약 30 분 후에 발생하지만 스레드가 놓이는 시간에 따라 다릅니다. 자다). 논리적으로, 나는이 시스템의 불안정한 부분을 가질 수 없다.
누구든지이 예외가 발생하는 이유를 알고 있으며 연결이 끊어짐으로 인해 발생했는지 확인하십시오.