작업자 역할로 작업하는 것은 문제가 발생하면 조금 까다 롭습니다. 역할을 종료하고 다시 시작해야하는 작업자 역할에서 예외가 발생했습니다.Azure Worker 역할 오류 처리
나는 무슨 일이 일어나고 있는지를 기록하기 위해 하늘색 진단 솔루션을 구현하기로 결정했습니다. 그것은 추적 할 메시지를 작성하려고 할 때 작동하지만 예외를 catch하고 로그 할 수 없습니다. 나는 catch를 시도하고 추적 할 예외 내용을 작성하려고 시도하면서 코드를 둘러 쌉니다.
이 올바른 접근 방식입니까? 왜 작동하지 않습니까? 작업자 역할에서 예외를 기록하는 더 좋은 방법이 있습니까? 고맙습니다. 내 코드 :
public class WorkerRole : RoleEntryPoint
{
private const int WAIT_INTERVAL_SECONDS = 15;
public override void Run()
{
Trace.WriteLine("$projectname$ entry point called", "Information");
while (true)
{
try
{
string id = MainWCFRole.Storage.TrackProcessingQueueDAO.retrieveMsgContents();
if ((id != null) && (!id.Equals("")))
{
var points = MainWCFRole.Storage.TrackRawDataDAO.retrieve(id);
Processor.process(id, points);
}
else
{
Thread.Sleep(WAIT_INTERVAL_SECONDS * 1000);
}
}
catch (Exception ex)
{
Trace.TraceInformation("Something went wrong");
Trace.TraceError(ex.ToString());
throw ex;
}
}
}
public override bool OnStart()
{
// Set the maximum number of concurrent connections
ServicePointManager.DefaultConnectionLimit = 12;
DiagnosticMonitorConfiguration dmc = DiagnosticMonitor.GetDefaultInitialConfiguration();
dmc.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
dmc.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
dmc.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
dmc.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
DiagnosticMonitor.Start("StorageConnectionString", dmc);
Trace.TraceInformation("Starting Worker Role TrackProcessor");
return base.OnStart();
}
}
Processor.process (id, points)는 예외를 throw하는 메서드입니다. 더 정확하게는, 나는 그것이 SQL Azure 쿼리를 호출하려고 할 때이다. 롤이 시작될 때 Trace.TraceInformation ("Starting Worker Role TrackProcessor")을 호출하기 때문에 진단이 작동한다는 것을 알고 있습니다. 메시 지로 테이블 저장 영역에 표시됩니다. 그런 다음 시간이 지나면 역할에 예외가 발생하고 다시 시작해야하므로 더 많은 메시지가 발생합니다. 그러나 로그에 오류 메시지가 없습니다.
예외를 throw하기 전에 지연을 추가 할 수 있습니까? 노드의 모니터 에이전트가 진단 로그로 로그를 업로드 할 수 있기 전에 역할이 재활용 될 수 있습니다. –
유망한 소리, 나는 시험 할 것이다. 진단 모니터가 일정이 아닌 요구에 따라 데이터를 유지하도록하는 방법이 있습니까? 즉시 해결할 수 있고 역할이 즉시 다시 시작되었습니다. –