public static void ConfigureForSquidex(this ISiloBuilder builder, IConfiguration config)
        {
            builder.AddOrleansPubSub();

            builder.ConfigureServices(siloServices =>
            {
                siloServices.AddSingletonAs <DefaultMongoClientFactory>()
                .As <IMongoClientFactory>();

                siloServices.AddSingletonAs <ActivationLimiter>()
                .As <IActivationLimiter>();

                siloServices.AddScopedAs <ActivationLimit>()
                .As <IActivationLimit>();

                siloServices.AddScoped(typeof(IGrainState <>), typeof(Infrastructure.Orleans.GrainState <>));
            });

            builder.ConfigureApplicationParts(parts =>
            {
                parts.AddApplicationPart(SquidexEntities.Assembly);
                parts.AddApplicationPart(SquidexInfrastructure.Assembly);
            });

            builder.Configure <ClusterOptions>(options =>
            {
                options.Configure();
            });

            builder.Configure <DashboardOptions>(options =>
            {
                options.HideTrace = true;
            });

            builder.UseDashboard(options =>
            {
                options.HostSelf = false;
            });

            builder.AddIncomingGrainCallFilter <LoggingFilter>();
            builder.AddIncomingGrainCallFilter <ExceptionWrapperFilter>();
            builder.AddIncomingGrainCallFilter <ActivationLimiterFilter>();
            builder.AddIncomingGrainCallFilter <LocalCacheFilter>();
            builder.AddIncomingGrainCallFilter <StateFilter>();

            var orleansPortSilo    = config.GetOptionalValue("orleans:siloPort", 11111);
            var orleansPortGateway = config.GetOptionalValue("orleans:gatewayPort", 40000);

            config.ConfigureByOption("orleans:clustering", new Alternatives
            {
                ["MongoDB"] = () =>
                {
                    IPAddress address;

                    var configuredAddress = config.GetOptionalValue("orleans:ipAddress", string.Empty);

                    if (!string.IsNullOrWhiteSpace(configuredAddress))
                    {
                        address = IPAddress.Parse(configuredAddress);
                    }
                    else
                    {
                        address = Helper.ResolveIPAddressAsync(Dns.GetHostName(), AddressFamily.InterNetwork).Result;
                    }

                    builder.ConfigureEndpoints(
                        address,
                        orleansPortSilo,
                        orleansPortGateway,
                        true);

                    builder.UseMongoDBClustering(options =>
                    {
                        options.Strategy = MongoDBMembershipStrategy.SingleDocument;

                        options.Configure(config);
                    });
                },
                ["Development"] = () =>
                {
                    builder.UseLocalhostClustering(orleansPortSilo, orleansPortGateway);
                }
            });

            config.ConfigureByOption("store:type", new Alternatives
            {
                ["MongoDB"] = () =>
                {
                    builder.UseMongoDBReminders(options =>
                    {
                        options.Configure(config);
                    });
                }
            });
        }
Exemple #2
0
        public static void ConfigureForSquidex(this ISiloBuilder builder, IConfiguration config)
        {
            builder.AddOrleansPubSub();

            builder.ConfigureServices(services =>
            {
                services.AddScoped(typeof(IGrainState <>), typeof(Infrastructure.Orleans.GrainState <>));

                services.AddSingletonAs <DefaultMongoClientFactory>()
                .As <IMongoClientFactory>();

                services.AddSingletonAs <ActivationLimiter>()
                .As <IActivationLimiter>();

                services.AddScopedAs <ActivationLimit>()
                .As <IActivationLimit>();

                services.AddInitializer <IJsonSerializer>("Serializer (Orleans)", serializer =>
                {
                    J.DefaultSerializer = serializer;
                }, -1);
            });

            builder.ConfigureApplicationParts(parts =>
            {
                parts.AddApplicationPart(SquidexEntities.Assembly);
                parts.AddApplicationPart(SquidexInfrastructure.Assembly);
            });

            builder.Configure <SchedulingOptions>(options =>
            {
                options.TurnWarningLengthThreshold = TimeSpan.FromSeconds(5);
            });

            builder.Configure <ClusterOptions>(options =>
            {
                options.Configure();
            });

            builder.Configure <DashboardOptions>(options =>
            {
                options.HideTrace = true;
            });

            builder.UseDashboardEmbeddedFiles();
            builder.UseDashboard(options =>
            {
                options.HostSelf = false;
            });

            builder.AddIncomingGrainCallFilter <LoggingFilter>();
            builder.AddIncomingGrainCallFilter <ExceptionWrapperFilter>();
            builder.AddIncomingGrainCallFilter <ActivationLimiterFilter>();
            builder.AddIncomingGrainCallFilter <LocalCacheFilter>();
            builder.AddIncomingGrainCallFilter <StateFilter>();

            var(siloPort, gatewayPort) = GetPorts(config);

            config.ConfigureByOption("orleans:clustering", new Alternatives
            {
                ["MongoDB"] = () =>
                {
                    var address = GetIPAddress(config);

                    builder.ConfigureEndpoints(
                        address,
                        siloPort,
                        gatewayPort,
                        true);

                    builder.UseMongoDBClustering(options =>
                    {
                        options.Strategy = MongoDBMembershipStrategy.SingleDocument;

                        options.Configure(config);
                    });

                    if (config.GetValue <bool>("orleans:kubernetes"))
                    {
                        builder.UseKubernetesHosting();
                    }
                },
                ["Development"] = () =>
                {
                    builder.UseLocalhostClustering(siloPort, gatewayPort);
                }
            });

            config.ConfigureByOption("store:type", new Alternatives
            {
                ["MongoDB"] = () =>
                {
                    builder.UseMongoDBReminders(options =>
                    {
                        options.Configure(config);
                    });
                }
            });
        }
 public void Configure(ISiloBuilder siloBuilder)
 {
     siloBuilder.AddOrleansPubSub();
 }