public void Configure(ISiloBuilder hostBuilder)
                {
                    hostBuilder
                    .AddIncomingGrainCallFilter(context =>
                    {
                        if (string.Equals(context.InterfaceMethod.Name, nameof(IGrainCallFilterTestGrain.GetRequestContext)))
                        {
                            if (RequestContext.Get(GrainCallFilterTestConstants.Key) != null)
                            {
                                throw new InvalidOperationException();
                            }
                            RequestContext.Set(GrainCallFilterTestConstants.Key, "1");
                        }

                        return(context.Invoke());
                    })
                    .AddIncomingGrainCallFilter <GrainCallFilterWithDependencies>()
                    .AddOutgoingGrainCallFilter(async ctx =>
                    {
                        if (ctx.InterfaceMethod?.Name == "Echo")
                        {
                            // Concatenate the input to itself.
                            var orig         = (string)ctx.Arguments[0];
                            ctx.Arguments[0] = orig + orig;
                        }

                        await ctx.Invoke();
                    })
                    .AddSimpleMessageStreamProvider("SMSProvider")
                    .AddMemoryGrainStorageAsDefault()
                    .AddMemoryGrainStorage("PubSubStore");
                }
        /// <summary>
        /// Adds the Activity Grain incoming filter.
        /// </summary>
        /// <param name="builder">The <see cref="ISiloBuilder"/>.</param>
        /// <returns>The <see cref="ISiloBuilder"/>.</returns>
        public static ISiloBuilder AddActivityIncomingFilter([NotNull] this ISiloBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddIncomingGrainCallFilter <ActivityIncomingGrainCallFilter>());
        }
Exemple #3
0
        public static void ConfigureForSquidex(this ISiloBuilder builder, IConfiguration config)
        {
            builder.ConfigureServices(siloServices =>
            {
                siloServices.AddSingleton <IMongoClientFactory, DefaultMongoClientFactory>();

                siloServices.AddSingleton <IActivationLimiter, ActivationLimiter>();
                siloServices.AddScoped <IActivationLimit, ActivationLimit>();

                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 <ProcessExitHandlingOptions>(options =>
            {
                options.FastKillOnProcessExit = false;
            });

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

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

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

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

            config.ConfigureByOption("orleans:clustering", new Alternatives
            {
                ["MongoDB"] = () =>
                {
                    var 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 #4
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.AddIncomingGrainCallFilter <ExceptionWrapperFilter>();
 }