public void ShouldLoadOpsConfig() { var config = OpsConfig.GetOpsConfig(); if (config.HasPath("akka.cluster")) // so we don't barf on lesson1 (/start) { config.GetConfig("akka.cluster").HasPath("split-brain-resolver.active-strategy").Should().BeTrue(); } }
public static Akka.Configuration.Config ApplyPhobosConfig(this Akka.Configuration.Config previousConfig) { var enabledPhobosStr = Environment.GetEnvironmentVariable(OpsConfig.PHOBOS_ENABLED)?.Trim().ToLowerInvariant() ?? "false"; if (bool.TryParse(enabledPhobosStr, out var enabledPhobos) && enabledPhobos) { return(OpsConfig.GetPhobosConfig().WithFallback(previousConfig)); } return(previousConfig); }
static int Main(string[] args) { var config = File.ReadAllText("app.conf"); var conf = ConfigurationFactory.ParseString(config) .WithFallback(OpsConfig.GetOpsConfig()) .WithFallback(ClusterSharding.DefaultConfig()) .WithFallback(DistributedPubSub.DefaultConfig()); var actorSystem = ActorSystem.Create("AkkaTrader", conf.BootstrapFromDocker()); Cluster.Cluster.Get(actorSystem).RegisterOnMemberUp(() => { var sharding = ClusterSharding.Get(actorSystem); var shardRegionProxy = sharding.StartProxy("orderBook", "trade-processor", new StockShardMsgRouter()); foreach (var stock in AvailableTickerSymbols.Symbols) { var max = (decimal)ThreadLocalRandom.Current.Next(20, 45); var min = (decimal)ThreadLocalRandom.Current.Next(10, 15); var range = new PriceRange(min, 0.0m, max); // start bidders foreach (var i in Enumerable.Repeat(1, ThreadLocalRandom.Current.Next(1, 2))) { actorSystem.ActorOf(Props.Create(() => new BidderActor(stock, range, shardRegionProxy))); } // start askers foreach (var i in Enumerable.Repeat(1, ThreadLocalRandom.Current.Next(1, 2))) { actorSystem.ActorOf(Props.Create(() => new AskerActor(stock, range, shardRegionProxy))); } } }); // start Petabridge.Cmd (for external monitoring / supervision) var pbm = PetabridgeCmd.Get(actorSystem); pbm.RegisterCommandPalette(ClusterCommands.Instance); pbm.RegisterCommandPalette(ClusterShardingCommands.Instance); pbm.RegisterCommandPalette(RemoteCommands.Instance); pbm.Start(); actorSystem.WhenTerminated.Wait(); return(0); }
static int Main(string[] args) { var mongoConnectionString = Environment.GetEnvironmentVariable("MONGO_CONNECTION_STR")?.Trim(); if (string.IsNullOrEmpty(mongoConnectionString)) { Console.WriteLine("ERROR! MongoDb connection string not provided. Can't start."); return(-1); } else { Console.WriteLine("Connecting to MongoDb at {0}", mongoConnectionString); } var config = File.ReadAllText("app.conf"); var conf = ConfigurationFactory.ParseString(config).WithFallback(GetMongoHocon(mongoConnectionString)) .WithFallback(OpsConfig.GetOpsConfig()) .WithFallback(ClusterSharding.DefaultConfig()) .WithFallback(DistributedPubSub.DefaultConfig()); var actorSystem = ActorSystem.Create("AkkaTrader", conf.BootstrapFromDocker()); Cluster.Cluster.Get(actorSystem).RegisterOnMemberUp(() => { var sharding = ClusterSharding.Get(actorSystem); var shardRegion = sharding.Start("orderBook", s => OrderBookActor.PropsFor(s), ClusterShardingSettings.Create(actorSystem), new StockShardMsgRouter()); }); // start Petabridge.Cmd (for external monitoring / supervision) var pbm = PetabridgeCmd.Get(actorSystem); pbm.RegisterCommandPalette(ClusterCommands.Instance); pbm.RegisterCommandPalette(ClusterShardingCommands.Instance); pbm.RegisterCommandPalette(RemoteCommands.Instance); pbm.Start(); actorSystem.WhenTerminated.Wait(); return(0); }
public static Akka.Configuration.Config ApplyOpsConfig(this Akka.Configuration.Config previousConfig) { var nextConfig = previousConfig.BootstrapFromDocker(); return(OpsConfig.GetOpsConfig().ApplyPhobosConfig().WithFallback(nextConfig)); }
public void Should_load_default_OpsConfig() { var config = OpsConfig.GetOpsConfig(); config.Should().NotBeNull(); }
static int Main(string[] args) { var mongoConnectionString = Environment.GetEnvironmentVariable("MONGO_CONNECTION_STR")?.Trim(); if (string.IsNullOrEmpty(mongoConnectionString)) { Console.WriteLine("ERROR! MongoDb connection string not provided. Can't start."); return(-1); } else { Console.WriteLine("Connecting to MongoDb at {0}", mongoConnectionString); } var config = File.ReadAllText("app.conf"); var conf = ConfigurationFactory.ParseString(config).WithFallback(GetMongoHocon(mongoConnectionString)) .WithFallback(OpsConfig.GetOpsConfig()) .WithFallback(ClusterSharding.DefaultConfig()) .WithFallback(DistributedPubSub.DefaultConfig()); var actorSystem = ActorSystem.Create("AkkaPricing", conf.BootstrapFromDocker()); var readJournal = actorSystem.ReadJournalFor <MongoDbReadJournal>(MongoDbReadJournal.Identifier); var priceViewMaster = actorSystem.ActorOf(Props.Create(() => new PriceViewMaster()), "prices"); Cluster.Cluster.Get(actorSystem).RegisterOnMemberUp(() => { var sharding = ClusterSharding.Get(actorSystem); var shardRegion = sharding.Start("priceAggregator", s => Props.Create(() => new MatchAggregator(s, readJournal)), ClusterShardingSettings.Create(actorSystem), new StockShardMsgRouter()); // used to seed pricing data var singleton = ClusterSingletonManager.Props( Props.Create(() => new PriceInitiatorActor(readJournal, shardRegion)), ClusterSingletonManagerSettings.Create( actorSystem.Settings.Config.GetConfig("akka.cluster.price-singleton"))); // start the creation of the pricing views priceViewMaster.Tell(new PriceViewMaster.BeginTrackPrices(shardRegion)); }); // start Petabridge.Cmd (for external monitoring / supervision) var pbm = PetabridgeCmd.Get(actorSystem); void RegisterPalette(CommandPaletteHandler h) { if (pbm.RegisterCommandPalette(h)) { Console.WriteLine("Petabridge.Cmd - Registered {0}", h.Palette.ModuleName); } else { Console.WriteLine("Petabridge.Cmd - DID NOT REGISTER {0}", h.Palette.ModuleName); } } RegisterPalette(ClusterCommands.Instance); RegisterPalette(RemoteCommands.Instance); RegisterPalette(ClusterShardingCommands.Instance); RegisterPalette(new PriceCommands(priceViewMaster)); pbm.Start(); actorSystem.WhenTerminated.Wait(); return(0); }
public void ShouldLoadOpsConfig() { var config = OpsConfig.GetOpsConfig(); config.GetConfig("akka.cluster").HasPath("split-brain-resolver.active-strategy").Should().BeTrue(); }