[英]Azure Service Fabric Actors - unhandled exceptions?
現在我們的ASF集群正在運行:
我們正在嘗試應用見解,我也喜歡他們的文檔設置未處理的錯誤跟蹤這里有我們的Web API項目。
問題是,我想要我們的Actor項目。
在Actor中是否存在捕獲未處理錯誤的全局位置? 我知道它是新的,也許這就是為什么我找不到這方面的文檔。
現在我在每個actor方法中都這樣做,但似乎不是一個很好的解決方案:
public async Task DoStuff()
{
try
{
//Do all my stuff
}
catch (Exception exc)
{
//Send to Windows Event Source
ActorEventSource.Current.ActorMessage(this, "Unhandled error in {0}: {1}", nameof(DoStuff), exc);
//Send to Application Insights
new TelemetryClient().TrackException(exc);
throw exc;
}
}
你有幾個選擇:
Actor有一個內置的ETW提供程序( Microsoft-ServiceFabric-Actors
),它有一個ActorMethodThrewException
事件。 你可以:
EventListener
類來監聽進程中的事件並將其轉發到App Insights(稍微不那么可靠,但更簡單) 使用自定義ActorServiceRemotingDispatcher
,它是負責向actor調度操作的類
class CustomActorServiceRemotingDispatcher : ActorServiceRemotingDispatcher { public CustomActorServiceRemotingDispatcher(ActorService actorService) : base(actorService) { } public override async Task<byte[]> RequestResponseAsync(IServiceRemotingRequestContext requestContext, ServiceRemotingMessageHeaders messageHeaders, byte[] requestBodyBytes) { try { LogServiceMethodStart(...); result = await base.RequestResponseAsync(requestContext, messageHeaders, requestBodyBytes).ConfigureAwait(false); LogServiceMethodStop(...); return result; } catch (Exception exception) { LogServiceMethodException(...); throw; } } }
要使用此類,您需要創建一個自定義的ActorService
類並重寫CreateServiceReplicaListeners
方法。 請注意,這將覆蓋您可能正在使用的任何ActorRemotingProviderAttribute
。
附注:
IServiceRemotingClientFactory
來添加它們) ServiceRemotingDispatcher
類) 不,今天沒有全球的地方可以從演員框架中的演員拋出異常。 框架本身確實捕獲了由actor運行時管理的方法引發的異常 - 這些是您的actor接口方法(可從ActorProxy調用的方法),計時器回調,提醒回調和基本actor重寫,如OnActivateAsync - 但它們'不是通過actor API公開的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.