Пример #1
0
        public Task Consume(ConsumeContext <IMassTransitCommand> context)
        {
            var command = context.Message;

            if (HostActorRef.ActorIsReady)
            {
                HostActorRef.ActorRef.Tell(command);
            }
            else
            {
                HostActorRef.CacheDto(command);
            }
            return(Task.CompletedTask);
        }
Пример #2
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMassTransit(x =>
            {
                x.AddConsumer <CommandConsumer>();
                x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    var host = cfg.Host(new Uri("rabbitmq://localhost:/"), h =>
                    {
                        h.Username("guest");
                        h.Password("guest");
                    });
                    cfg.ReceiveEndpoint(host, "hostel_queue", e =>
                    {
                        e.PrefetchCount = 500;
                        e.UseRetry(r => r.Immediate(5));
                        e.Consumer <CommandConsumer>(provider);
                    });
                }));
            });

            services.AddSingleton <IPublishEndpoint>(provider => provider.GetRequiredService <IBusControl>());
            services.AddSingleton <ISendEndpointProvider>(provider => provider.GetRequiredService <IBusControl>());
            services.AddSingleton <IBus>(provider => provider.GetRequiredService <IBusControl>());
            /* Register the ActorSystem*/
            services.AddSingleton(provider =>
            {
                var serviceScopeFactory = provider.GetService <IServiceScopeFactory>();
                var actorSystem         = ActorSystem.Create("HostelActorSystem", ConfigurationLoader.Load("host.hocon"));
                actorSystem.AddServiceScopeFactory(serviceScopeFactory);
                return(actorSystem);
            });

            services.AddSingleton(provider =>
            {
                //var cons = Construct();
                var actorSystem        = provider.GetService <ActorSystem>();
                var hostelManagerActor = actorSystem.ActorOf(HostelManagerActor.Prop(new HostelManagerHandler(), new HostelManagerState(false), "HostelManager", Configuration.GetConnectionString("Database")), "HostelManager");
                HostActorRef.ActorRef  = hostelManagerActor;
                //HostActorRef.ActorRef.Tell(cons);
                HostActorRef.ActorIsReady = true;
                HostActorRef.ProcessCached();
                return(hostelManagerActor);
            });
            services.AddSingleton <IHostedService, HostelService>();
        }