Csharp/C#教程:Azure Service Fabric Actors – 未处理的exception?分享


Azure Service Fabric Actors – 未处理的exception?

现在我们的ASF集群正在运行:

我们正在尝试Application Insights,我可以设置未处理的错误跟踪,就像他们的文档对我们的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; } } 

你有几个选择:

  • 使用自定义ActorServiceRemotingDispatcher ,它是负责向actor调度操作的类

     class CustomActorServiceRemotingDispatcher : ActorServiceRemotingDispatcher { public CustomActorServiceRemotingDispatcher(ActorService actorService) : base(actorService) { } public override async Task 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

    附注:

  • 不,今天没有全球的地方可以从演员框架中的演员抛出exception。 框架本身确实捕获了由actor运行时管理的方法引发的exception – 这些是您的actor接口方法(可从ActorProxy调用的方法),计时器回调,提醒回调和基本actor重写,如OnActivateAsync – 但它们’不会通过actor API公开。

    上述就是C#学习教程:Azure Service Fabric Actors – 未处理的exception?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

    本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

    ctvol管理联系方式QQ:251552304

    本文章地址:https://www.ctvol.com/cdevelopment/950758.html

    (0)
    上一篇 2021年11月17日
    下一篇 2021年11月17日

    精彩推荐