gpt4 book ai didi

c# - Azure Service Fabric 参与者 - 未处理的异常?

转载 作者:太空狗 更新时间:2023-10-29 17:51:41 27 4
gpt4 key购买 nike

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

  • Web API 项目 - 无状态且面向公众
  • Actor 项目 - 主要是 volatile 的,将数据保存在内存中,由某些 API 使用

我们正在试用 Application Insights,我可以像他们的文档一样设置未处理的错误跟踪 here用于我们的 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 Diagnostics)
    • 使用 EventListener 类来监听进程中的事件并将其转发给 App Insights(不太可靠,但更简单)
  • 使用自定义的 ActorServiceRemotingDispatcher,它是负责将操作分派(dispatch)给参与者的类

    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

    旁注:

    • 您也可以使用此方法读取自己的 header (您还需要客户端自定义 IServiceRemotingClientFactory 来添加它们)
    • 可以将相同的技术应用于 Reliable Services(使用 ServiceRemotingDispatcher 类)

关于c# - Azure Service Fabric 参与者 - 未处理的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37191068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com