簡體   English   中英

Azure Service Fabric Actors - 未處理的異常?

[英]Azure Service Fabric Actors - unhandled exceptions?

現在我們的ASF集群正在運行:

  • Web API項目 - 無狀態和面向公眾
  • Actor項目 - 主要是volatile,將數據保存在內存中,由某些API使用

我們正在嘗試應用見解,我也喜歡他們的文檔設置未處理的錯誤跟蹤這里有我們的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事件。 你可以:

    • 使用外部進程收集ETW事件並將其轉發到Application Insights(例如,使用SLAB或Azure診斷)
    • 使用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來添加它們)
    • 相同的技術可以應用於Reliable Services(使用ServiceRemotingDispatcher類)

不,今天沒有全球的地方可以從演員框架中的演員拋出異常。 框架本身確實捕獲了由actor運行時管理的方法引發的異常 - 這些是您的actor接口方法(可從ActorProxy調用的方法),計時器回調,提醒回調和基本actor重寫,如OnActivateAsync - 但它們'不是通過actor API公開的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM