我们如何在Service Fabric Actor可靠服务中添加Application Insight

如何解决我们如何在Service Fabric Actor可靠服务中添加Application Insight

我们有5个可靠的actor服务,这些服务将从无状态的aspnet核心Web API调用。 现在,服务结构应用程序正在生产中运行,但是作为向天蓝色迁移的一部分,我们希望所有自定义事件并跟踪到应用程序见解。

如何将其添加到SF?请注意,我正在寻找可靠的演员服务。在可靠的服务中添加这种方法很简单,但是Actor服务却面临着挑战。

我参考了本https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-tutorial-monitoring-aspnet教程,以获取可靠的服务,但是如果使用.NET Framework编写的可靠的actor服务,则无法使用。

解决方法

引用此GitHub公开问题的示例:Add documentation for configure actor services

设置服务上下文

  1. 创建自己的actor服务类并在那里初始化上下文:
internal class MyActorService : ActorService
{
    public MyActorService(
        StatefulServiceContext context,ActorTypeInformation actorTypeInfo,Func<ActorService,ActorId,ActorBase> actorFactory = null,Func<ActorBase,IActorStateProvider,IActorStateManager> stateManagerFactory = null,IActorStateProvider stateProvider = null,ActorServiceSettings settings = null)
    : base(context,actorTypeInfo,actorFactory,stateManagerFactory,stateProvider,settings)
    {
        FabricTelemetryInitializerExtension.SetServiceCallContext(this.Context);
    }
}
  1. 按以下方式注册演员服务:
ActorRuntime.RegisterActorAsync<MyActor>(
    (context,actorType) => new MyActorService(context,actorType)).GetAwaiter().GetResult();

启用服务远程关联

首先,请确保正确设置了服务远程处理。您可以找到更多信息here

远程处理V2(推荐)

初始化服务远程依赖/请求跟踪模块,如下所示。

注意:您还可以通过CreateFabricTelemetryInitializer方法设置服务上下文。在这种情况下,您无需致电SetServiceCallContext

public MyActorServiceNetCore(
            StatefulServiceContext context,ActorServiceSettings settings = null)
        : base(context,settings)
        {
            var config = TelemetryConfiguration.Active;
            config.InstrumentationKey = "<your ikey>";
            config.TelemetryInitializers.Add(FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(this.Context));

            var requestTrackingModule = new ServiceRemotingRequestTrackingTelemetryModule();
            var dependencyTrackingModule = new ServiceRemotingDependencyTrackingTelemetryModule();
            requestTrackingModule.Initialize(config);
            dependencyTrackingModule.Initialize(config);
        }

远程处理V1

如果您仍要使用Service Remoting V1并跟踪关联,则可以按照以下说明进行操作,但强烈建议您升级到Remoting V2。

  1. 在发送方像下面一样创建代理
//IActorService actorServiceProxy = ActorServiceProxy.Create(new Uri(serviceUri),partitionKey);
CorrelatingActorProxyFactory actorProxyFactory = new CorrelatingActorProxyFactory(serviceContext,callbackClient => new FabricTransportActorRemotingClientFactory(callbackClient));
IActorService actorServiceProxy = actorProxyFactory.CreateActorServiceProxy<IActorService>(new Uri(serviceUri),partitionKey);
  1. 按如下所示初始化侦听器:
    internal class MyActorService : ActorService
    {
        public MyActorService(
            StatefulServiceContext context,settings)
        {
        }

        protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
        {
            return new[]
            {
                new ServiceReplicaListener(
                    context => new FabricTransportActorServiceRemotingListener(
                        context,new CorrelatingRemotingMessageHandler(this),new FabricTransportRemotingListenerSettings()))
            };
        }
    }
  1. 注册您自己的演员服务:
// ActorRuntime.RegisterActorAsync<MyActor>(
//     (context,actorType) => new ActorService(context,actorType)).GetAwaiter().GetResult();
ActorRuntime.RegisterActorAsync<MyActor>(
    (context,actorType)).GetAwaiter().GetResult();

最初由@ yantang-msft发表在https://github.com/microsoft/ApplicationInsights-ServiceFabric/issue_comments/434430800

其他资源:service-fabric-application-insights-example

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?