예제 #1
0
        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();
        }
예제 #2
0
 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());
            }
        }
예제 #4
0
        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();
            }
        }
예제 #5
0
 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);
 }
예제 #6
0
        // 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>());
        }