コード例 #1
0
        public TaskAllocator(ITaskMetadataManager metadataManager, ITaskRepository taskRepository, IOptions <TaskAllocatorOptions> options, ILogger <TaskAllocator> logger)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }
            if (string.IsNullOrEmpty(options.Value.Name))
            {
                throw new ArgumentNullException(nameof(TaskAllocatorOptions.Name));
            }

            var optionsValue = options.Value;

            Name = options.Value.Name;

            if (optionsValue.TimeoutWaitingTasksPerExecutor > TimeSpan.Zero)
            {
                timeoutWaitingTasksPerExecutor = optionsValue.TimeoutWaitingTasksPerExecutor;
            }
            if (optionsValue.MaxTasksPerExecutor > 0)
            {
                maxTasksPerExecutor = optionsValue.MaxTasksPerExecutor;
            }

            MetadataManager     = metadataManager ?? throw new ArgumentNullException(nameof(metadataManager));
            this.taskRepository = taskRepository ?? throw new ArgumentNullException(nameof(taskRepository));
            commandQueue        = new TaskQueue(metadataManager.Tasks.Select(it => it.TaskType).ToArray());

            this.logger = logger;
        }
コード例 #2
0
        public static bool HasTaskType <TTask>(this ITaskMetadataManager taskMetadataManager)
        {
            if (taskMetadataManager == null)
            {
                throw new ArgumentNullException(nameof(taskMetadataManager));
            }

            return(taskMetadataManager.HasTaskType(typeof(TTask)));
        }
コード例 #3
0
        public TaskMetadataManagerTests()
        {
            var services = new ServiceCollection();

            services.AddWorkerCore()
            .AddTaskType(typeof(TestTask));

            serviceProvider = services.BuildServiceProvider();
            serviceScope    = serviceProvider.CreateScope();

            metadataManager = serviceScope.ServiceProvider.GetService <ITaskMetadataManager>();
        }
コード例 #4
0
        public TaskAllocatorTests()
        {
            host = new HostBuilder()
                   .ConfigureServices((hostContext, services) =>
            {
                services
                .AddWorkerAllocator(options =>
                {
                    options.TimeoutWaitingTasksPerExecutor = TimeSpan.FromSeconds(2);
                    options.MaxTasksPerExecutor            = 2;
                })
                .AddTaskType <TestTask>();

                services.AddSingleton <TaskAllocator>();
            })
                   .Build();

            metadataManager = host.Services.GetRequiredService <ITaskMetadataManager>();
            allocator       = (TaskAllocator)host.Services.GetRequiredService <ITaskAllocator>();
        }
コード例 #5
0
        public ITaskRepositoryTests()
        {
            host = new HostBuilder()
                   .ConfigureServices((hostContext, services) =>
            {
                services
                .AddWorkerAllocator(options =>
                {
                    options.TimeoutWaitingTasksPerExecutor = TimeSpan.FromSeconds(2);
                })
                .AddTaskRepository <MemoryTaskRepository>()
                .AddTaskType(typeof(TestTask));

                services.AddSingleton <TaskAllocator>();
            })
                   .Build();

            metadataManager = host.Services.GetRequiredService <ITaskMetadataManager>();
            allocator       = host.Services.GetRequiredService <ITaskAllocator>();
            taskRepository  = (MemoryTaskRepository)host.Services.GetRequiredService <ITaskRepository>();
        }
コード例 #6
0
        public HandlerTest()
        {
            var services = new ServiceCollection();

            services.AddLogging();

            var workerBuilder = services.AddWorkerAllocator(OnConfigureAllocator);

            workerBuilder.AddTaskType <TCommand>();

            var executorBuilder = workerBuilder.AddExecutor();

            executorBuilder.MapTaskHandler <TCommand, THandler>();

            OnConfigureServices(services);

            ServiceProvider = services.BuildServiceProvider();
            ServiceScope    = ServiceProvider.CreateScope();

            Allocator           = ServiceScope.ServiceProvider.GetRequiredService <ITaskAllocator>();
            Executor            = ServiceScope.ServiceProvider.GetRequiredService <TaskExecutor>();
            TaskService         = ServiceScope.ServiceProvider.GetRequiredService <ITaskService>();
            TaskMetadataManager = ServiceScope.ServiceProvider.GetRequiredService <ITaskMetadataManager>();
        }
コード例 #7
0
 public LocalTaskAllocator(ITaskMetadataManager metadataManager, ITaskRepository taskRepository, IOptions <TaskAllocatorOptions> options, IServiceProvider serviceProvider, ILogger <TaskAllocator> logger) : base(metadataManager, taskRepository, options, logger)
 {
     this.serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
 }
コード例 #8
0
 public MongoDbTaskRepository(MongoDB.IWorkerMongoDbContext dbContext, ITaskMetadataManager taskMetadataManager)
 {
     this.taskMetadataManager = taskMetadataManager ?? throw new ArgumentNullException(nameof(taskMetadataManager));
     this.dbContext           = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
 }
コード例 #9
0
 public RemoteTaskAllocator(WorkerServiceClient workerClient, ITaskMetadataManager metadataManager, IServiceProvider serviceProvider, ILogger <RemoteTaskAllocator> logger)
 {
     this.workerClient    = workerClient ?? throw new ArgumentNullException(nameof(workerClient));
     this.serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
     this.logger          = logger ?? throw new ArgumentNullException(nameof(logger));
 }
コード例 #10
0
        public TaskExecutor(ITaskAllocator taskAllocator, ITaskHandlerLocator handlerLocator, ITaskMetadataManager metadataManager, IServiceProvider serviceProvider, ILogger <TaskExecutor> logger)
        {
            this.taskAllocator   = taskAllocator ?? throw new ArgumentNullException(nameof(taskAllocator));
            this.serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
            this.logger          = logger ?? throw new ArgumentNullException(nameof(logger));

            foreach (var taskType in handlerLocator.TaskTypes)
            {
                var taskMetadata = metadataManager.FindTaskMetadata(taskType);
                if (taskMetadata == null)
                {
                    throw new InvalidOperationException();
                }

                handlerFactories.Add(taskType, new TaskHandlerMetadata(taskMetadata.TaskName, HandlerBaseType.MakeGenericType(taskType)));
            }
        }