static void Main(string[] args) { IServiceCollection collection = new ServiceCollection(); collection.AddTransient <TypedWorker>(); var config = ConfigurationFactory.ParseString( @"akka.actor.deployment { /workers { router = consistent-hashing-group routees.paths = [""/user/Worker1"", ""/user/Worker2""] } }"); // Create the ActorSystem using (var system = ActorSystem.Create("MySystem")) { var provider = collection.BuildAkkaServiceProvider(); IDependencyResolver resolver = new DotNetCoreDependencyResolver(provider, system); // Register the actors with the system system.ActorOf(system.DI().Props <TypedWorker>(), "Worker1"); system.ActorOf(system.DI().Props <TypedWorker>(), "Worker2"); // Create the router var workers = new[] { "/user/Worker1", "/user/Worker2" }; IActorRef router = system.ActorOf(Props.Empty.WithRouter(new RoundRobinGroup(workers))); // Create the message to send TypedActorMessage message = new TypedActorMessage { Id = 1, Name = Guid.NewGuid().ToString() }; // Send the message to the router router.Tell(new Broadcast(message)); system.WhenTerminated.Wait(); } }
private static void WithHashPool() { var builder = new ContainerBuilder(); builder.RegisterType <TypedWorker>(); var container = builder.Build(); using (var system = ActorSystem.Create("MySystem")) { var propsResolver = new AutoFacDependencyResolver(container, system); var router = system.ActorOf(propsResolver.Create <TypedWorker>().WithRouter(FromConfig.Instance), "router1"); Task.Delay(500).Wait(); Console.WriteLine("Sending Messages"); for (var i = 0; i < 5; i++) { for (var j = 0; j < 7; j++) { var msg = new TypedActorMessage { Id = j, Name = Guid.NewGuid().ToString() }; var ms = new AnotherMessage { Id = j, Name = msg.Name }; var envelope = new ConsistentHashableEnvelope(ms, msg.Id); router.Tell(msg); router.Tell(envelope); } } Console.WriteLine("Hit Enter to close"); Console.ReadLine(); } }
private static void WithHashPool() { var builder = new ContainerBuilder(); builder.RegisterType<TypedWorker>(); var container = builder.Build(); using (var system = ActorSystem.Create("MySystem")) { var propsResolver = new AutoFacDependencyResolver(container, system); var router = system.ActorOf(system.DI().Props<TypedWorker>().WithRouter(FromConfig.Instance), "router1"); Task.Delay(500).Wait(); Console.WriteLine("Sending Messages"); for (var i = 0; i < 5; i++) { for (var j = 0; j < 7; j++) { var msg = new TypedActorMessage { Id = j, Name = Guid.NewGuid().ToString() }; var ms = new AnotherMessage { Id = j, Name = msg.Name }; var envelope = new ConsistentHashableEnvelope(ms, msg.Id); router.Tell(msg); router.Tell(envelope); } } Console.WriteLine("Hit Enter to close"); Console.ReadLine(); } }
private static void WithHashPool() { Ninject.IKernel container = new Ninject.StandardKernel(); container.Bind <TypedWorker>().To(typeof(TypedWorker)); using (var system = ActorSystem.Create("MySystem")) { var propsResolver = new NinjectDependencyResolver(container, system); var router = system.ActorOf(propsResolver.Create <TypedWorker>().WithRouter(FromConfig.Instance), "router1"); Task.Delay(500).Wait(); Console.WriteLine("Sending Messages"); for (var i = 0; i < 5; i++) { for (var j = 0; j < 7; j++) { var msg = new TypedActorMessage { Id = j, Name = Guid.NewGuid().ToString() }; var ms = new AnotherMessage { Id = j, Name = msg.Name }; var envelope = new ConsistentHashableEnvelope(ms, msg.Id); router.Tell(msg); router.Tell(envelope); } } } Console.ReadLine(); }
private static void WithHashPool() { using (var system = ActorSystem.Create("MySystem")) { IWindsorContainer container = new WindsorContainer(); container.Register(Component.For <TypedWorker>().Named("TypedWorker").LifestyleTransient()); var propsResolver = new WindsorDependencyResolver(container, system); var router = system.ActorOf(system.DI().Props <TypedWorker>().WithRouter(FromConfig.Instance), "router1"); Task.Delay(500).Wait(); Console.WriteLine("Sending Messages"); for (var i = 0; i < 5; i++) { for (var j = 0; j < 7; j++) { var msg = new TypedActorMessage { Id = j, Name = Guid.NewGuid().ToString() }; var ms = new AnotherMessage { Id = j, Name = msg.Name }; var envelope = new ConsistentHashableEnvelope(ms, msg.Id); router.Tell(msg); router.Tell(envelope); } } Console.WriteLine("Hit Enter to exit"); Console.ReadLine(); } }
private static void WithHashPool() { IContainer container = new Container(cfg => { cfg.For<TypedWorker>().Use<TypedWorker>().Named("TypedWorker").LifecycleIs<TransientLifecycle>(); }); using (var system = ActorSystem.Create("MySystem")) { var propsResolver = new StructureMapDependencyResolver(container, system); var router = system.ActorOf(system.DI().Props<TypedWorker>().WithRouter(FromConfig.Instance), "router1"); Task.Delay(500).Wait(); Console.WriteLine("Sending Messages"); for (var i = 0; i < 5; i++) { for (var j = 0; j < 7; j++) { var msg = new TypedActorMessage { Id = j, Name = Guid.NewGuid().ToString() }; var ms = new AnotherMessage { Id = j, Name = msg.Name }; var envelope = new ConsistentHashableEnvelope(ms, msg.Id); router.Tell(msg); router.Tell(envelope); } } Console.WriteLine("Hit Enter to exit"); Console.ReadLine(); } }