static void Main(string[] args) { ConfigureAutofac(); ResolveLogger(); using (var system = ActorSystem.Create(SystemName)) { Logger.WriteVerbose("Actor system created"); var resolver = new AutoFacDependencyResolver(Container, system); system.ActorOf(resolver.Create <PlaybackActor>(), PlaybackActorName); bool running = true; do { Console.WriteLine("Enter a command and hit Enter"); Console.WriteLine("eg 'play <user id> <movie title>'"); Console.WriteLine("eg 'stop <user id>'"); Console.WriteLine("(enter 'exit' to quit)"); var command = Console.ReadLine(); if (command.StartsWith("play", StringComparison.InvariantCultureIgnoreCase)) { var parts = command.Split(new[] { ' ' }, 3); var userId = int.Parse(parts[1]); var movieTitle = parts[2]; var message = new PlayMovieMessage(movieTitle, userId); system.ActorSelection($"/user/{PlaybackActorName}/{UserCoordinatorActorName}").Tell(message); } if (command.StartsWith("stop", StringComparison.InvariantCultureIgnoreCase)) { var parts = command.Split(new[] { ' ' }, 2); var userId = int.Parse(parts[1]); var message = new StopMovieMessage(userId); system.ActorSelection($"/user/{PlaybackActorName}/{UserCoordinatorActorName}").Tell(message); } if (command.StartsWith("exit", StringComparison.InvariantCultureIgnoreCase)) { running = false; } } while (running); system.Terminate().GetAwaiter().GetResult(); Logger.WriteDebug("Actor system terminated"); } Console.WriteLine("Press any key to exit..."); Console.ReadKey(); }
public void Start() { if (!_initialised) { var hoconConfig = ConfigurationFactory.ParseString(AkkaHoconConfig.Hocon); Container = _containerBuilder.Build(); ActorSystem = ActorSystem.Create("Win10NoUpActorSystem", hoconConfig); DependencyResolver = new AutoFacDependencyResolver(Container, ActorSystem); RootActor = ActorSystem.ActorOf(DependencyResolver.Create <TRootActor>(), $"rootActor-{nameof(TRootActor)}"); _initialised = true; } }
public void Start() { _actorSystem = ActorSystem.Create(ParseActorSystemName(), Logging.GetAkkaLoggingConfig()); var resolver = new AutoFacDependencyResolver(_iocContainer, _actorSystem); _rootActor = _actorSystem.ActorOf(resolver.Create <SourceActor>(), "source"); string ParseActorSystemName() { var hyphonated = Regex.Replace(_hostSettings.ServiceName, @"[\s|_]+", "-"); var filtered = Regex.Replace(hyphonated, "[^A-z0-9]", string.Empty); return(filtered.ToLower()); } }
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(); } }
RegisterActor <TActor>(this ContainerBuilder builder, ActorSystem system, AutoFacDependencyResolver props, ActorMetadata actorEntry) where TActor : ActorBase { return(builder.Register(ctx => system.ActorOf(props.Create <TActor>(), actorEntry.Name)).Named <IActorRef>(actorEntry.Name)); //var actorInstance = system.ActorOf(props.Create<TActor>(), actorEntry.Name); //return builder.RegisterInstance(actorInstance).Named<IActorRef>(actorEntry.Name); }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 public IServiceProvider ConfigureServices(IServiceCollection services) { // SignalR camel case contract var settings = new JsonSerializerSettings(); settings.ContractResolver = new SignalRContractResolver(); var serializer = JsonSerializer.Create(settings); services.Add(new ServiceDescriptor(typeof(JsonSerializer), provider => serializer, ServiceLifetime.Transient)); services.AddOptions(); services.Configure <ProxySettings>(Configuration.GetSection("ProxySettings")); services.AddCors(); services.AddMvc() .AddJsonOptions(opt => { opt.SerializerSettings.DateFormatString = "yyyy-MM-dd"; // opt.SerializerSettings.Converters = new[] { new JavaScriptDateTimeConverter() }; }); services.AddSignalR(options => { options.Hubs.EnableDetailedErrors = true; }); var builder = new ContainerBuilder(); builder.RegisterLogger(); builder.RegisterType <DomainStatSenderHub>().ExternallyOwned() .SingleInstance(); builder.RegisterInstance <IMapper>(_mapperConfiguration.CreateMapper()) .SingleInstance(); builder.RegisterInstance <IConfigurationRoot>(Configuration) .SingleInstance(); builder.RegisterType <UnitOfWork>().As <IUnitOfWork>() .SingleInstance(); builder.RegisterType <DomainService>().As <IDomainService>() .SingleInstance(); builder.RegisterInstance(new DBContext(Configuration)) .SingleInstance(); builder.RegisterType <UnitOfWork>().As <IUnitOfWork>() .SingleInstance(); builder.RegisterType <TimeGeneratorService>().As <ITimeGeneratorService>() .SingleInstance() //.WithParameter("startTime", TimeSpan.FromMinutes(1).TotalSeconds) //.WithParameter("timePeriodSec", TimeSpan.FromMinutes(15).TotalSeconds) ; builder.RegisterType <DomainProcessorActor>(); builder.RegisterType <DomainParserActor>(); builder.RegisterType <RequestSchedulerActor>() .SingleInstance(); builder.RegisterType <CoordinatorActor>() .SingleInstance(); ProcessProxySettings(builder); builder.Populate(services); ApplicationContainer = builder.Build(); // Create the dependency resolver IDependencyResolver resolver = new AutoFacDependencyResolver(ApplicationContainer, ActorSystemRefs.ActorSystem); var actorSystem = ActorSystemRefs.ActorSystem; var propsCoord = resolver.Create <CoordinatorActor>(); SystemActors.CoordinatorActor = actorSystem.ActorOf(propsCoord, "CoordinatorActor"); // Register the actors with the system //var propsParser = resolver.Create<DomainParserActor>().WithRouter(new RoundRobinPool(5)); var propsProc = resolver.Create <DomainProcessorActor>(); //var propScheduler = resolver.Create<RequestSchedulerActor>(); SystemActors.DomainProcessorActor = actorSystem.ActorOf(propsProc, "DomainProcessorActorForApiRequests"); //SystemActors.DomainParserActor = actorSystem.ActorOf(propsParser, "DomainParserActor"); //SystemActors.RequestSchedulerActor = actorSystem.ActorOf(propScheduler, "RequestSchedulerActor"); SystemActors.CoordinatorActor.Tell("start"); // Return the IServiceProvider resolved from the container. return(ApplicationContainer.Resolve <IServiceProvider>()); }