public async Task StartAsync(CancellationToken cancellationToken)
        {
            using (await singletonLifecycleLock.AcquireAsync())
            {
                if (!isSharedWorkerStarted)
                {
                    await sharedOrchestrationService.CreateIfNotExistsAsync();

                    await sharedWorker.StartAsync();

                    isSharedWorkerStarted = true;
                }
            }
        }
        static async Task Main(string[] args)
        {
            //Use Azurite emulator
            string storageConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" +
                                             "BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1";
            string taskHubName = "RetryTest";

            var settings = new AzureStorageOrchestrationServiceSettings();

            settings.StorageConnectionString      = storageConnectionString;
            settings.TaskHubName                  = taskHubName;
            settings.UseDataContractSerialization = true;

            var orchestrationServiceAndClient = new AzureStorageOrchestrationService(settings);
            await orchestrationServiceAndClient.CreateIfNotExistsAsync();

            var taskHubClient = new TaskHubClient(orchestrationServiceAndClient);
            var taskHub       = new TaskHubWorker(orchestrationServiceAndClient);

            // add instance
            _ = Task.Run(async() =>
            {
                OrchestrationInstance ins = await taskHubClient.CreateOrchestrationInstanceAsync(typeof(HelloOrchestration), "b", "");
            });

            // add worker
            try
            {
                taskHub.AddTaskOrchestrations(
                    typeof(HelloOrchestration)
                    );

                taskHub.AddTaskActivitiesFromInterface <IFailedTask>(new FailedTask());


                await taskHub.StartAsync();

                //Console.WriteLine("Press any key to quit.");
                Console.ReadLine();
                taskHub.StopAsync(true).Wait();
            }
            catch (Exception e)
            {
                // silently eat any unhandled exceptions.
                Console.WriteLine($"worker exception: {e}");
            }
        }
        private static async Task Main(string[] args)
        {
            foreach (DictionaryEntry env in Environment.GetEnvironmentVariables())
            {
                var name  = (string)env.Key;
                var value = (string)env.Value;
                Console.WriteLine("{0}={1}", name, value);
            }

            var storageConnectionString = Environment.GetEnvironmentVariable("StorageConnectionString");
            var taskHubName             = Environment.GetEnvironmentVariable("TaskHubName");
            var durationInSeconds       = Environment.GetEnvironmentVariable("DurationInSeconds");
            var mre = new ManualResetEvent(false);

            var settings = new AzureStorageOrchestrationServiceSettings
            {
                StorageConnectionString = storageConnectionString,
                TaskHubName             = taskHubName
            };
            var orchestrationServiceAndClient = new AzureStorageOrchestrationService(settings);

            var taskHubClient = new TaskHubClient(orchestrationServiceAndClient);
            var taskHub       = new TaskHubWorker(orchestrationServiceAndClient);

            orchestrationServiceAndClient.CreateIfNotExistsAsync().Wait();
            try
            {
                await taskHub
                .AddTaskOrchestrations(typeof(CronOrchestration))
                .AddTaskActivities(new CronTask())
                .StartAsync();

                var orchestrationInstance = await taskHubClient.CreateOrchestrationInstanceAsync(
                    typeof(CronOrchestration),
                    TimeSpan.FromSeconds(double.Parse(durationInSeconds ?? "5")));

                Console.WriteLine($"ExecutionId: {orchestrationInstance.ExecutionId}. Blocking main thread.");
                mre.WaitOne();
                await taskHub.StopAsync(true);

                Console.WriteLine("Done!!");
            }
            catch (Exception e)
            {
                Console.WriteLine($"worker exception: {e}");
            }
        }
        public void Configure(out TaskHubClient taskHubClient, out TaskHubWorker taskHub)
        {
            string storageConnectionString = "UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://127.0.0.1:10002/";

            string taskHubName = "ScopeSample";

            var orchestrationServiceAndClient =
                new AzureStorageOrchestrationService(new AzureStorageOrchestrationServiceSettings
            {
                StorageConnectionString = storageConnectionString,
                TaskHubName             = taskHubName
            });

            taskHubClient = new TaskHubClient(orchestrationServiceAndClient);
            taskHub       = new TaskHubWorker(orchestrationServiceAndClient);

            orchestrationServiceAndClient.CreateIfNotExistsAsync().Wait();
        }
Exemple #5
0
        private static async Task StartWorker()
        {
            var workerId = Guid.NewGuid().ToString();

            Console.WriteLine("*****************************************************");
            Console.WriteLine("**** Starting Worker Service: " + workerId);
            Console.WriteLine("*****************************************************");

            var storageConnectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
            var taskHubName             = ConfigurationManager.AppSettings["TaskHubName"];

            var azureStorageOrchestrationSetting = new AzureStorageOrchestrationServiceSettings()
            {
                TaskHubName             = taskHubName,
                StorageConnectionString = storageConnectionString,
                WorkerId = workerId
            };

            IOrchestrationService       orchestrationService       = new AzureStorageOrchestrationService(azureStorageOrchestrationSetting);
            IOrchestrationServiceClient orchestrationServiceClient = new AzureStorageOrchestrationService(azureStorageOrchestrationSetting);

            var taskHubWorker = new TaskHubWorker(orchestrationService);
            var taskHubClient = new TaskHubClient(orchestrationServiceClient);

            _ = taskHubWorker.AddTaskOrchestrations(typeof(ModelValidationOrchestration));
            _ = taskHubWorker.AddTaskActivities(typeof(ExtractInterfacesActivity));
            _ = taskHubWorker.AddTaskActivities(typeof(ValidateInterfaceActivity));

            await orchestrationService.CreateIfNotExistsAsync().ConfigureAwait(true);

            Task.Run(async() =>
            {
                await Start(taskHubWorker).ConfigureAwait(true);
            }).Wait();

            while (true)
            {
                Thread.Sleep(1000);
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine("Working: " + DateTime.Now.ToString());
            }
        }
Exemple #6
0
        static async Task Main(string[] args)
        {
            var listener = new CustomEventListener();

            listener.EnableEvents(DefaultEventSource.Log, EventLevel.Warning);

            string storageConnectionString = Storage.StorageConnectionString;
            var    settings = new AzureStorageOrchestrationServiceSettings
            {
                StorageConnectionString = storageConnectionString,
                //TaskHubName = "PartitionTest",
                TaskHubName    = "PartitionTest",
                PartitionCount = 1,
                //MaxConcurrentTaskOrchestrationWorkItems = 100,
                //MaxConcurrentTaskActivityWorkItems = 10,
                //MaxStorageOperationConcurrency = Environment.ProcessorCount * 25,
            };

            var orchestrationServiceAndClient = new AzureStorageOrchestrationService(settings);
            //just for test
            await orchestrationServiceAndClient.DeleteAsync();

            //await Task.Delay(TimeSpan.FromSeconds(60));
            await orchestrationServiceAndClient.CreateIfNotExistsAsync();

            var taskHubClient = new TaskHubClient(orchestrationServiceAndClient);
            var taskHubWorker = new TaskHubWorker(orchestrationServiceAndClient);

            //1.create 1000** instance
            await Test.CreateMockOrchestrationInstancesAsync(40, 5, taskHubClient);

            //
            await Test.StartWorker(taskHubWorker);

            Console.WriteLine("Press any key to quit.");
            Console.ReadLine();
        }
Exemple #7
0
        static void Main(string[] args)
        {
            AzureStorageOrchestrationService orchestrationService = new AzureStorageOrchestrationService(new AzureStorageOrchestrationServiceSettings()
            {
                StorageConnectionString = "DefaultEndpointsProtocol=https;AccountName=kanodaprototype;AccountKey=0OiZiF8Xd2R8GvUxUh+cnganiM2LPIff/yfaHeyaMsjm8kG2VECV4XfZBWE84DVtyqkxiMNRalFexul9j+1tmA==;EndpointSuffix=core.windows.net",
                TaskHubName             = "Prototype"
            });

            orchestrationService.CreateIfNotExistsAsync().Wait();
            TaskHubWorker taskHub = new TaskHubWorker(orchestrationService);

            try
            {
                taskHub.AddTaskOrchestrations(
                    typeof(LetterCountOrchestration)
                    );

                taskHub.AddTaskActivities(
                    new AddTask(),
                    new LogTask()
                    );


                taskHub.StartAsync().Wait();

                Console.WriteLine("Press any key to quit.");
                Console.ReadLine();

                taskHub.StopAsync(true).Wait();
            }
            catch (Exception e)
            {
                // silently eat any unhadled exceptions.
                Console.WriteLine($"worker exception: {e}");
            }
        }
Exemple #8
0
        static void Main(string[] args)
        {
            AzureStorageOrchestrationService orchestrationService = new AzureStorageOrchestrationService(new AzureStorageOrchestrationServiceSettings()
            {
                StorageConnectionString = ServiceSettings.StorageConnectionString,
                TaskHubName             = ServiceSettings.TaskHubName
            });

            orchestrationService.CreateIfNotExistsAsync().Wait();
            TaskHubWorker taskHub = new TaskHubWorker(orchestrationService);

            try
            {
                taskHub.AddTaskOrchestrations(
                    typeof(LetterCountOrchestration)
                    );

                taskHub.AddTaskActivities(
                    new AddTask(),
                    new LogTask()
                    );


                taskHub.StartAsync().Wait();

                Console.WriteLine("Press any key to quit.");
                Console.ReadLine();

                taskHub.StopAsync(true).Wait();
            }
            catch (Exception e)
            {
                // silently eat any unhadled exceptions.
                Console.WriteLine($"worker exception: {e}");
            }
        }
Exemple #9
0
        async Task <AzureStorageOrchestrationService> EnsureTaskHubAsync(
            string testName,
            bool testDeletion,
            bool deleteBeforeCreate = true,
            string workerId         = "test")
        {
            string storageConnectionString = TestHelpers.GetTestStorageAccountConnectionString();
            var    storageAccount          = CloudStorageAccount.Parse(storageConnectionString);

            string taskHubName = testName;
            var    settings    = new AzureStorageOrchestrationServiceSettings
            {
                TaskHubName             = taskHubName,
                StorageConnectionString = storageConnectionString,
                WorkerId = workerId,
            };

            Trace.TraceInformation($"Task Hub name: {taskHubName}");

            var service = new AzureStorageOrchestrationService(settings);

            if (deleteBeforeCreate)
            {
                await service.CreateAsync();
            }
            else
            {
                await service.CreateIfNotExistsAsync();
            }

            // Control queues
            Assert.IsNotNull(service.AllControlQueues, "Control queue collection was not initialized.");
            ControlQueue[] controlQueues = service.AllControlQueues.ToArray();
            Assert.AreEqual(4, controlQueues.Length, "Expected to see the default four control queues created.");
            foreach (ControlQueue queue in controlQueues)
            {
                Assert.IsTrue(await queue.InnerQueue.ExistsAsync(), $"Queue {queue.Name} was not created.");
            }

            // Work-item queue
            WorkItemQueue workItemQueue = service.WorkItemQueue;

            Assert.IsNotNull(workItemQueue, "Work-item queue client was not initialized.");
            Assert.IsTrue(await workItemQueue.InnerQueue.ExistsAsync(), $"Queue {workItemQueue.Name} was not created.");

            // TrackingStore
            ITrackingStore trackingStore = service.TrackingStore;

            Assert.IsNotNull(trackingStore, "Tracking Store was not initialized.");

            try
            {
                Assert.IsTrue(trackingStore.ExistsAsync().Result, $"Tracking Store was not created.");
            }
            catch (NotSupportedException)
            { }

            string             expectedContainerName = taskHubName.ToLowerInvariant() + "-leases";
            CloudBlobContainer taskHubContainer      = storageAccount.CreateCloudBlobClient().GetContainerReference(expectedContainerName);

            Assert.IsTrue(await taskHubContainer.ExistsAsync(), $"Task hub blob container {expectedContainerName} was not created.");

            // Task Hub config blob
            CloudBlob infoBlob = taskHubContainer.GetBlobReference("taskhub.json");

            Assert.IsTrue(await infoBlob.ExistsAsync(), $"The blob {infoBlob.Name} was not created.");

            // Task Hub lease container
            CloudBlobDirectory leaseDirectory = taskHubContainer.GetDirectoryReference("default");

            IListBlobItem[] leaseBlobs = (await this.ListBlobsAsync(leaseDirectory)).ToArray();
            Assert.AreEqual(controlQueues.Length, leaseBlobs.Length, "Expected to see the same number of control queues and lease blobs.");

            foreach (IListBlobItem blobItem in leaseBlobs)
            {
                string path = blobItem.Uri.AbsolutePath;
                Assert.IsTrue(
                    controlQueues.Where(q => path.Contains(q.Name)).Any(),
                    $"Could not find any known control queue name in the lease name {path}");
            }

            if (testDeletion)
            {
                await service.DeleteAsync();

                foreach (ControlQueue queue in controlQueues)
                {
                    Assert.IsFalse(await queue.InnerQueue.ExistsAsync(), $"Queue {queue.Name} was not deleted.");
                }

                Assert.IsFalse(await workItemQueue.InnerQueue.ExistsAsync(), $"Queue {workItemQueue.Name} was not deleted.");

                try
                {
                    Assert.IsFalse(trackingStore.ExistsAsync().Result, $"Tracking Store was not deleted.");
                }
                catch (NotSupportedException)
                { }

                Assert.IsFalse(await taskHubContainer.ExistsAsync(), $"Task hub blob container {taskHubContainer.Name} was not deleted.");
            }

            return(service);
        }
Exemple #10
0
        static async Task Main(string[] args)
        {
            //Use Azurite emulator
            string storageConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" +
                                             "BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1";
            string taskHubName = "Hello";

            var settings = new AzureStorageOrchestrationServiceSettings();

            settings.StorageConnectionString      = storageConnectionString;
            settings.TaskHubName                  = taskHubName;
            settings.UseDataContractSerialization = true;

            var orchestrationServiceAndClient = new AzureStorageOrchestrationService(settings);
            await orchestrationServiceAndClient.CreateIfNotExistsAsync();

            var taskHubClient = new TaskHubClient(orchestrationServiceAndClient);
            var taskHub       = new TaskHubWorker(orchestrationServiceAndClient);

            // add instance
            _ = Task.Run(async() =>
            {
                OrchestrationInstance ins = await taskHubClient.CreateOrchestrationInstanceAsync(typeof(HelloOrchestration), "");
            });

            // add worker
            try
            {
                taskHub.AddTaskOrchestrations(
                    typeof(HelloOrchestration)
                    );

                taskHub.AddTaskActivities(typeof(HelloTask));
                taskHub.AddOrchestrationDispatcherMiddleware(async(context, next) =>
                {
                    OrchestrationRuntimeState runtimeState = context.GetProperty <OrchestrationRuntimeState>();
                    var customInstance      = OrchestrationInstanceEx.Initialize(runtimeState);
                    customInstance.Dic["a"] = "a";
                    customInstance.Dic["b"] = "b";
                    customInstance.Dic["c"] = "c";
                    context.SetProperty <OrchestrationInstance>(customInstance);

                    await next();
                });

                taskHub.AddOrchestrationDispatcherMiddleware(async(context, next) =>
                {
                    var customInstance = OrchestrationInstanceEx.Get(context.GetProperty <OrchestrationInstance>());
                    context.SetProperty <OrchestrationInstance>(customInstance);

                    //Dic data can get here. But missed in HelloOrchestration context and ActivityDispatcherMiddleware

                    await next();
                });

                taskHub.AddActivityDispatcherMiddleware(async(context, next) =>
                {
                    var customInstance = OrchestrationInstanceEx.Get(context.GetProperty <OrchestrationInstance>());
                    context.SetProperty <OrchestrationInstance>(customInstance);

                    //Dic data missed

                    await next();
                });

                await taskHub.StartAsync();

                //Console.WriteLine("Press any key to quit.");
                Console.ReadLine();
                taskHub.StopAsync(true).Wait();
            }
            catch (Exception e)
            {
                // silently eat any unhandled exceptions.
                Console.WriteLine($"worker exception: {e}");
            }
        }