Пример #1
0
        static void Main(string[] args)
        {
            var config = new ClientConfiguration
            {
                DataConnectionString       = "UseDevelopmentStorage=true",
                PropagateActivityId        = true,
                DefaultTraceLevel          = Severity.Info,
                GatewayProvider            = ClientConfiguration.GatewayProviderType.AzureTable,
                TraceToConsole             = true,
                StatisticsCollectionLevel  = StatisticsLevel.Critical,
                StatisticsLogWriteInterval = TimeSpan.FromDays(6),
                TraceFileName    = null,
                TraceFilePattern = null,
                ResponseTimeout  = TimeSpan.FromSeconds(90),
                StatisticsMetricsTableWriteInterval = TimeSpan.FromDays(6),
                StatisticsPerfCountersWriteInterval = TimeSpan.FromDays(6),
            };

            OrleansFabricClient.Initialize(new Uri("fabric:/CalculatorApp/CalculatorService"), config);
            Run(args).Wait();
        }
        public GatewayService(StatelessServiceContext context)
            : base(context)
        {
            WinApi.TimeBeginPeriod(1); //improve sleep precision for polling type transports

            float timeoutDebugMultiplier = 1;
            var   builder = new ContainerBuilder();

            var esLogsConfig    = new FabricConfigProvider <ElasticSearchOutputConfig>("ElasticSearchLogs").Config;
            var esMetricsConfig = new FabricConfigProvider <ElasticSearchOutputConfig>("ElasticSearchMetrics").Config;

            var logger = new LoggerConfiguration()
                         .ConfigureMOUSETypesDestructure()
                         .MinimumLevel.Error()
                         .Enrich.With(new AzureServiceFabricSerilogEnricher(context))
                         .Enrich.With <ExceptionEnricher>()
                         .Enrich.With <ActivityIdSerilogEnricher>()
                         .WriteTo.Elasticsearch(
                new ElasticsearchSinkOptions(new Uri(esLogsConfig.ElasticSearchUri))
            {
                IndexFormat = $"{esLogsConfig.ElasticSearchIndexName}-{{0:yyyy.MM.dd}}"
            })
                         .CreateLogger();

            Log.Logger = logger;

            builder.RegisterInstance(logger).As <ILogger>();
            builder.RegisterType <SerilogCoreEvents>().As <ICoreEvents>();
            builder.RegisterType <SerilogActorCoreEvents>().As <IActorCoreEvents>();
            builder.RegisterType <SerilogLidgrenEvents>().As <ILidgrenEvents>();

            Metric.Config.WithAllCounters();

            _metricsSubscription = new TelemetryPipe()
                                   .CollectMetricsNet(5, ServiceFabricHelpers.GetEnvironmentProperties(context), true)
                                   .SendToElasticSearch(esMetricsConfig)
                                   .Start();

            builder.Register(
                c => new ProtobufMessageSerializer(typeof(Message).Assembly, typeof(TestStateless).Assembly))
            .As <IMessageSerializer>();

            var publicEndpoint  = FabricRuntime.GetActivationContext().GetEndpoint("Public");
            var public2Endpoint = FabricRuntime.GetActivationContext().GetEndpoint("Public2");
            var public3Endpoint = FabricRuntime.GetActivationContext().GetEndpoint("Public3");
            var nodeIP          = Dns.GetHostAddresses(FabricRuntime.GetNodeContext().IPAddressOrFQDN).First(x => x.AddressFamily == AddressFamily.InterNetwork);

            var publicNetConfig = new NetPeerConfiguration("PublicNet")
            {
                LocalAddress              = nodeIP,
                MaximumConnections        = 10000,
                AcceptIncomingConnections = true,
                Port = publicEndpoint.Port,
                ConnectionTimeout = 10 * timeoutDebugMultiplier
            };
            var public2NetConfig = new NetPeerConfiguration("PublicNet")
            {
                LocalAddress              = nodeIP,
                MaximumConnections        = 10000,
                AcceptIncomingConnections = true,
                Port = public2Endpoint.Port,
                ConnectionTimeout = 10 * timeoutDebugMultiplier
            };

            var public3NetConfig = new NetPeerConfiguration("PublicNet")
            {
                LocalAddress              = nodeIP,
                MaximumConnections        = 10000,
                AcceptIncomingConnections = true,
                Port = public3Endpoint.Port,
                ConnectionTimeout = 10 * timeoutDebugMultiplier
            };

            var testActorsNetConfig = new NetPeerConfiguration("TestActors")
            {
                LocalAddress = nodeIP,
                AcceptIncomingConnections = false,
                Port = 0,
                ConnectionTimeout = 10 * timeoutDebugMultiplier
            };

            builder.RegisterType <WcfBufferPool>().As <IBufferPool>();

            builder.Register(c =>
            {
                var messageSerialer = c.Resolve <IMessageSerializer>();
                var coreLogger      = c.Resolve <ICoreEvents>();
                var nedNodeConfig   = c.Resolve <INetNodeConfig>();
                var bufferPool      = c.Resolve <IBufferPool>();

                return(new NetNode <SFActorsBackendClientNetChannel>("PublicNet",
                                                                     new LidgrenNetProvider(publicNetConfig, c.Resolve <ILidgrenEvents>()),
                                                                     coreLogger, messageSerialer,
                                                                     (node, transport) => new SFActorsBackendClientNetChannel(node, transport, messageSerialer, coreLogger, nedNodeConfig, bufferPool),
                                                                     nedNodeConfig));
            })
            .As <INetNode>()
            .SingleInstance();

            builder.Register(c =>
            {
                var actorSystem     = c.Resolve <IActorSystem <ITestActor> >();
                var messageSerialer = c.Resolve <IMessageSerializer>();
                var coreLogger      = c.Resolve <ICoreEvents>();
                var netNodeConfig   = c.Resolve <INetNodeConfig>();
                var bufferPool      = c.Resolve <IBufferPool>();

                return(new NetNode <MouseActorsBackendClientNetChannel>("PublicNet2",
                                                                        new LidgrenNetProvider(public2NetConfig, c.Resolve <ILidgrenEvents>()),
                                                                        coreLogger, messageSerialer,
                                                                        (node, transport) => new MouseActorsBackendClientNetChannel(actorSystem, node, transport, messageSerialer, coreLogger, netNodeConfig, bufferPool),
                                                                        netNodeConfig));
            })
            .As <INetNode>()
            .SingleInstance();

            builder.Register(c =>
            {
                var messageSerialer = c.Resolve <IMessageSerializer>();
                var coreLogger      = c.Resolve <ICoreEvents>();
                var netNodeConfig   = c.Resolve <INetNodeConfig>();
                var bufferPool      = c.Resolve <IBufferPool>();

                return(new NetNode <OrleansBackendClientNetChannel>("PublicNet3",
                                                                    new LidgrenNetProvider(public3NetConfig, c.Resolve <ILidgrenEvents>()),
                                                                    coreLogger, messageSerialer,
                                                                    (node, transport) => new OrleansBackendClientNetChannel(node, transport, messageSerialer, coreLogger, netNodeConfig, bufferPool),
                                                                    netNodeConfig));
            })
            .As <INetNode>()
            .SingleInstance();

            builder.Register(c =>
                             new ServiceFabricActorSystemNetNode <ITestActor>("TestActors", new Uri("fabric:/MouseTestActor.Deploy/MouseTestActor"),
                                                                              new LidgrenNetProvider(testActorsNetConfig, c.Resolve <ILidgrenEvents>()),
                                                                              c.Resolve <IActorCoreEvents>(), c.Resolve <ICoreEvents>(), c.Resolve <IMessageSerializer>(), c.Resolve <INetNodeConfig>(), c.Resolve <IBufferPool>()))
            .As <INetNode>()
            .As <IActorSystem <ITestActor> >()
            .SingleInstance();

            builder.Register(c => new NetNodeConfig()
            {
                SendTimeoutSec    = (int)(10.0 * timeoutDebugMultiplier),
                ConnectTimeoutSec = (int)(10 * timeoutDebugMultiplier)
            }).As <INetNodeConfig>();

            var container = builder.Build();

            _netNodes = container.Resolve <IEnumerable <INetNode> >();

            var config = new ClientConfiguration
            {
                //DataConnectionString = "DefaultEndpointsProtocol=https;AccountName=actorchatstorage;AccountKey=1hCY/Ak2TFrqE61cMhbPU5rkv9PuDfX7QQFU4tXCSc2AO78hLdm6u3PrGrZbUzOj7OkIZ93YKbU81VSVnBMbPg==",
                DataConnectionString       = "UseDevelopmentStorage=true",
                PropagateActivityId        = true,
                DefaultTraceLevel          = Severity.Info,
                GatewayProvider            = ClientConfiguration.GatewayProviderType.AzureTable,
                TraceToConsole             = true,
                StatisticsCollectionLevel  = StatisticsLevel.Critical,
                StatisticsLogWriteInterval = TimeSpan.FromDays(6),
                TraceFileName    = null,
                TraceFilePattern = null,
                ResponseTimeout  = TimeSpan.FromSeconds(90),
                StatisticsMetricsTableWriteInterval = TimeSpan.FromDays(6),
                StatisticsPerfCountersWriteInterval = TimeSpan.FromDays(6),
            };

            OrleansFabricClient.Initialize(new Uri("fabric:/OrleansTest/OrleansTestActor"), config);
        }