public RtqConsumer(IRtqConsumerSettings consumerSettings,
                           IRtqPeriodicJobRunner periodicJobRunner,
                           IRtqTaskHandlerRegistry taskHandlerRegistry,
                           RemoteTaskQueue remoteTaskQueue)
        {
            this.consumerSettings  = consumerSettings;
            this.periodicJobRunner = periodicJobRunner;
            RtqInternals           = remoteTaskQueue;
            var localQueueTaskCounter = new LocalQueueTaskCounter(consumerSettings.MaxRunningTasksCount, consumerSettings.MaxRunningContinuationsCount);

            localTaskQueue = new LocalTaskQueue(localQueueTaskCounter, taskHandlerRegistry, remoteTaskQueue);
            foreach (var taskTopic in taskHandlerRegistry.GetAllTaskTopicsToHandle())
            {
                var handlerManager = new HandlerManager(remoteTaskQueue.QueueKeyspace,
                                                        taskTopic,
                                                        consumerSettings.MaxRunningTasksCount,
                                                        localTaskQueue,
                                                        remoteTaskQueue.HandleTasksMetaStorage,
                                                        remoteTaskQueue.GlobalTime,
                                                        remoteTaskQueue.Logger);
                handlerManagers.Add(handlerManager);
            }
            reportConsumerStateToGraphitePeriodicJob = new ReportConsumerStateToGraphitePeriodicJob(remoteTaskQueue.QueueKeyspace, remoteTaskQueue.Profiler, handlerManagers);
            logger = remoteTaskQueue.Logger.ForContext(nameof(RtqConsumer));
        }
Exemple #2
0
 public LocalTaskQueue(LocalQueueTaskCounter localQueueTaskCounter, IRtqTaskHandlerRegistry taskHandlerRegistry, IRtqInternals rtqInternals)
 {
     this.localQueueTaskCounter = localQueueTaskCounter;
     this.taskHandlerRegistry   = taskHandlerRegistry;
     this.rtqInternals          = rtqInternals;
     logger = rtqInternals.Logger.ForContext(nameof(LocalTaskQueue));
     rtqInternals.AttachLocalTaskQueue(this);
 }
Exemple #3
0
 public HandlerTask(
     [NotNull] TaskIndexRecord taskIndexRecord,
     TaskQueueReason reason,
     [CanBeNull] TaskMetaInformation taskMeta,
     IRtqTaskHandlerRegistry taskHandlerRegistry,
     IRtqInternals rtqInternals)
 {
     this.taskIndexRecord     = taskIndexRecord;
     this.reason              = reason;
     this.taskMeta            = taskMeta;
     this.taskHandlerRegistry = taskHandlerRegistry;
     serializer                 = rtqInternals.Serializer;
     taskProducer               = rtqInternals.TaskProducer;
     handleTaskCollection       = rtqInternals.HandleTaskCollection;
     remoteLockCreator          = rtqInternals.RemoteLockCreator;
     taskExceptionInfoStorage   = rtqInternals.TaskExceptionInfoStorage;
     handleTasksMetaStorage     = rtqInternals.HandleTasksMetaStorage;
     taskMinimalStartTicksIndex = rtqInternals.TaskMinimalStartTicksIndex;
     rtqProfiler                = rtqInternals.Profiler;
     globalTime                 = rtqInternals.GlobalTime;
     taskTtl = rtqInternals.TaskTtl;
     logger  = rtqInternals.Logger.ForContext(nameof(HandlerTask));
     taskShardMetricsContext = MetricsContext.For($"Shards.{taskIndexRecord.TaskIndexShardKey.TaskTopic}.{taskIndexRecord.TaskIndexShardKey.TaskState}.Tasks");
 }