/// <summary> /// Creates cluster publish subscribe settings from provided configuration with the same layout as `akka.cluster.pub-sub`. /// </summary> public static DistributedPubSubSettings Create(Config config) { RoutingLogic routingLogic = null; var routingLogicName = config.GetString("routing-logic"); switch (routingLogicName) { case "random": routingLogic = new RandomLogic(); break; case "round-robin": routingLogic = new RoundRobinRoutingLogic(); break; case "broadcast": routingLogic = new BroadcastRoutingLogic(); break; case "consistent-hashing": throw new ArgumentException("Consistent hashing routing logic cannot be used by the pub-sub mediator"); default: throw new ArgumentException("Unknown routing logic is tried to be applied to the pub-sub mediator: " + routingLogicName); } return(new DistributedPubSubSettings( config.GetString("role"), routingLogic, config.GetTimeSpan("gossip-interval"), config.GetTimeSpan("removed-time-to-live"), config.GetInt("max-delta-elements"))); }
/// <summary> /// Creates cluster publish subscribe settings from provided configuration with the same layout as `akka.cluster.pub-sub`. /// </summary> /// <param name="config">TBD</param> /// <exception cref="ArgumentException">TBD</exception> /// <returns>TBD</returns> public static DistributedPubSubSettings Create(Config config) { if (config.IsNullOrEmpty()) { throw ConfigurationException.NullOrEmptyConfig <DistributedPubSubSettings>(); } RoutingLogic routingLogic = null; var routingLogicName = config.GetString("routing-logic"); switch (routingLogicName) { case "random": routingLogic = new RandomLogic(); break; case "round-robin": routingLogic = new RoundRobinRoutingLogic(); break; case "broadcast": routingLogic = new BroadcastRoutingLogic(); break; case "consistent-hashing": throw new ArgumentException("Consistent hashing routing logic cannot be used by the pub-sub mediator"); default: throw new ArgumentException("Unknown routing logic is tried to be applied to the pub-sub mediator: " + routingLogicName); } // TODO: This will fail if DistributedPubSub.DefaultConfig() is not inside the fallback chain. // TODO: "gossip-interval" key depends on Config.GetTimeSpan() to return a TimeSpan.Zero default. // TODO: "removed-time-to-live" key depends on Config.GetTimeSpan() to return a TimeSpan.Zero default. // TODO: "max-delta-elements" key depends on Config.GetInt() to return a 0 default. return(new DistributedPubSubSettings( config.GetString("role", null), routingLogic, config.GetTimeSpan("gossip-interval"), config.GetTimeSpan("removed-time-to-live"), config.GetInt("max-delta-elements"), config.GetBoolean("send-to-dead-letters-when-no-subscribers"))); }