Пример #1
0
        public IEnumerable <IRunnable> Tasks(AppConfig config)
        {
            // List of tasks to run
            var tasks = new List <IRunnable>(new IRunnable[] {
                // Initialization task
                new InitTask(),

                // Initialize Table; creates table if it doesn't already exist
                new InitializeStorageTask(new TableStorage(config.TableName, config.ConnectionString)),

                // Initialize Container; creates container if it doesn't already exist
                new InitializeStorageTask(new Container(config.ContainerName, config.ConnectionString)),

                // Initialize Container; creates container if it doesn't already exist
                new InitializeStorageTask(new StorageQueue(config.GenericQueueName, config.ConnectionString)),

                //basic task
                new Recurring(),

                //Task once daily on the (specified/current) hour
                new OnceDaily(config.ConnectionString),

                //Backoff task
                new Backoff(),

                //Self governing task
                new Adaptive(),

                //Dequeue task, Backoff behavior
                new BackoffRunner(new CompanyDequeuer(config.GenericQueueName, config.ConnectionString)),

                //Dequeue task, Adaptive behavior
                new AdaptiveRunner(new CompanyDequeuer(config.GenericQueueName, config.ConnectionString)),

                //Dequeue task, Recurring behavior
                new RecurringRunner(new CompanyDequeuer(config.GenericQueueName, config.ConnectionString)),

                //Auto Scaling Task
                new DynamicScaler(config),
            });

            ///Dequeue examples
            var f = new DequeueFactory(config.ConnectionString);

            tasks.AddRange(f.Dequeue <CompanyProcessor, CompanyModel>(config.SlowQueueName));
            tasks.AddRange(f.Dequeue <CompanyProcessor, CompanyModel>(config.ModerateQueueName, QueuePriority.Medium));
            tasks.AddRange(f.Dequeue <CompanyProcessor, CompanyModel>(config.FastQueueName, QueuePriority.High));
            tasks.AddRange(f.Shards <CompanyProcessor, CompanyModel>(config.ShardQueueName, 10));

            //Cordinated Tasks between Instances
            var coordinated = new Coordinated(config.ConnectionString);

            // Add once to ensure that Table is created for Instances to communicate with
            tasks.AddRange(coordinated.Tasks());
            // Add your coordinated task
            tasks.Add(coordinated);

            return(tasks);
        }
Пример #2
0
        public void Dequeue()
        {
            var setup = new QueueSetup <object>()
            {
                Name     = "test",
                Priority = QueuePriority.High,
            };

            var random = new Random();
            var scale  = new Range <byte>();

            scale.Maximum = (byte)random.Next(byte.MinValue, byte.MaxValue);
            scale.Minimum = (byte)random.Next(byte.MinValue, scale.Maximum);

            var throughput = Substitute.For <IQueueThroughput>();

            throughput.Scale(setup.Priority).Returns(scale);
            throughput.CheckScaleEvery(setup.Priority).Returns((byte)random.Next(1, 300));

            var f    = new DequeueFactory(ConnectionString, throughput);
            var task = f.Dequeue <object>(setup);

            Assert.IsNotNull(task);
            var scaler = task as StorageQueueAutoScaler <object>;

            Assert.IsNotNull(scaler);
            Assert.AreEqual(scale.Minimum, scaler.InstanceCount.Minimum);
            Assert.AreEqual(scale.Maximum, scaler.InstanceCount.Maximum);

            throughput.Received().Scale(setup.Priority);
            throughput.Received().CheckScaleEvery(setup.Priority);
        }
Пример #3
0
        public void DequeueCreationDefault()
        {
            var f     = new DequeueFactory(ConnectionString);
            var tasks = f.Dequeue <HelpP, object>("testing");

            Assert.IsNotNull(tasks);
            Assert.AreEqual(2, tasks.Count());

            var t = (from n in tasks
                     where n.GetType() == typeof(InitializeStorageTask)
                     select true).FirstOrDefault();

            Assert.IsTrue(t);
        }
 public void DequeueTaskSetupNull()
 {
     var df = new DequeueFactory(ConnectionString);
     df.Dequeue<object>(null);
 }
        public void Dequeue()
        {
            var setup = new QueueSetup<object>()
            {
                Name = "test",
                Priority = QueuePriority.High,
            };

            var random = new Random();
            var scale = new Range<byte>();

            scale.Maximum = (byte)random.Next(byte.MinValue, byte.MaxValue);
            scale.Minimum = (byte)random.Next(byte.MinValue, scale.Maximum);
            
            var throughput = Substitute.For<IQueueThroughput>();
            throughput.Scale(setup.Priority).Returns(scale);
            throughput.CheckScaleEvery(setup.Priority).Returns((byte)random.Next(1, 300));

            var f = new DequeueFactory(ConnectionString, throughput);
            var task = f.Dequeue<object>(setup);

            Assert.IsNotNull(task);
            var scaler = task as StorageQueueAutoScaler<object>;
            Assert.IsNotNull(scaler);
            Assert.AreEqual(scale.Minimum, scaler.InstanceCount.Minimum);
            Assert.AreEqual(scale.Maximum, scaler.InstanceCount.Maximum);

            throughput.Received().Scale(setup.Priority);
            throughput.Received().CheckScaleEvery(setup.Priority);
        }
Пример #6
0
        public void DequeueNameNull()
        {
            var f = new DequeueFactory(ConnectionString);

            Assert.That(() => f.Dequeue <HelpP, object>(null), Throws.TypeOf <ArgumentException>());
        }
Пример #7
0
        public void DequeueTaskSetupNull()
        {
            var df = new DequeueFactory(ConnectionString);

            Assert.That(() => df.Dequeue <object>(null), Throws.TypeOf <ArgumentNullException>());
        }