static void Main(string[] args) { AppSettingsReader reader = new AppSettingsReader(); string servicebusConnectionString = reader.GetValue("Microsoft.ServiceBus.ConnectionString", typeof(string)).ToString(); string taskHubName = reader.GetValue("TaskHubName", typeof(string)).ToString(); TaskHubClient taskHubClient = new TaskHubClient(taskHubName, servicebusConnectionString); TaskHubWorker taskHub = new TaskHubWorker(taskHubName, servicebusConnectionString); taskHub.DeleteHub(); taskHub.CreateHubIfNotExists(); OrchestrationInstance instance = null; string instanceId = "TestTaskHub : " + Guid.NewGuid(); taskHub.AddTaskOrchestrations((typeof(TaskHubProcessingOrchestration))); taskHub.AddTaskActivitiesFromInterface <IActivityFunction>(new ActivityImplementor(), true); taskHub.AddTaskActivities(new GetUserTask()); instance = taskHubClient.CreateOrchestrationInstance(typeof(TaskHubProcessingOrchestration), instanceId, "hello"); taskHub.Start(); Console.WriteLine("Press any key to quit."); Console.ReadLine(); taskHub.Stop(true); }
/// <summary> /// Registers the collection of services. /// </summary> /// <param name="services"></param> /// <returns></returns> public ICollection <MicroserviceInstance> LoadServices(ICollection <Microservice> services) { loadTypesFromQualifiedNames(services); m_TaskHubWorker.AddTaskOrchestrations(services.Select(s => s.Orchestration).ToArray()); List <Type> taskActivities = new List <Type>(); List <Type> interfaceActivities = new List <Type>(); foreach (var task in services.SelectMany(s => s.Activities)) { if (taskActivities.Contains(task) == false) { if (typeof(TaskActivity).IsAssignableFrom(task)) { taskActivities.Add(task); } else { interfaceActivities.Add(task); } } } // Interface based tasks (do not implement TaskActivity) if (interfaceActivities.Count > 0) { m_TaskHubWorker.AddTaskActivitiesFromInterface(interfaceActivities); } // Classic task activities. m_TaskHubWorker.AddTaskActivities(taskActivities.ToArray()); List <MicroserviceInstance> allRunningInstances = new List <MicroserviceInstance>(); foreach (var svc in services) { List <MicroserviceInstance> runningInstances; bool isRunning = loadRunningInstances(svc.OrchestrationQName, out runningInstances); if (runningInstances != null) { allRunningInstances.AddRange(runningInstances); } RegisterServiceConfiguration(svc); } return(allRunningInstances); }
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}"); } }
public static void StartWorker(TaskHubWorker taskHub) { try { Console.WriteLine("Starting DurableTask worker..."); IUtilitySignupActivities utilitySignupActivities = new UtilitySignupActivities(); taskHub.AddTaskActivitiesFromInterface <IUtilitySignupActivities>(utilitySignupActivities); taskHub.AddTaskOrchestrations(typeof(UtilitySignupOrchestration)); taskHub.Start(); Console.WriteLine("DurableTask worker successfully started. Press any key to quit."); Console.ReadLine(); taskHub.Stop(true); } catch (Exception) { // silently eat any unhandled exceptions. } }
static void Main(string[] args) { eventListener = new ObservableEventListener(); eventListener.LogToConsole(); eventListener.EnableEvents(DefaultEventSource.Log, EventLevel.LogAlways); if (CommandLine.Parser.Default.ParseArgumentsStrict(args, ArgumentOptions)) { string serviceBusConnectionString = GetSetting("ServiceBusConnectionString"); string storageConnectionString = GetSetting("StorageConnectionString"); string taskHubName = ConfigurationManager.AppSettings["taskHubName"]; //IOrchestrationServiceInstanceStore instanceStore = new AzureTableInstanceStore(taskHubName, storageConnectionString); //var orchestrationServiceAndClient = // new ServiceBusOrchestrationService(serviceBusConnectionString, taskHubName, instanceStore, null, null); var orchestrationServiceAndClient = new DurableTask.Emulator.LocalOrchestrationService(); var taskHubClient = new TaskHubClient(orchestrationServiceAndClient); var taskHub = new TaskHubWorker(orchestrationServiceAndClient); if (ArgumentOptions.CreateHub) { orchestrationServiceAndClient.CreateIfNotExistsAsync().Wait(); } OrchestrationInstance instance = null; if (!string.IsNullOrWhiteSpace(ArgumentOptions.StartInstance)) { string instanceId = ArgumentOptions.InstanceId ?? Guid.NewGuid().ToString(); Console.WriteLine($"Start Orchestration: {ArgumentOptions.StartInstance}"); switch (ArgumentOptions.StartInstance) { case "Greetings": instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(GreetingsOrchestration), instanceId, null).Result; break; case "Greetings2": if (ArgumentOptions.Parameters == null || ArgumentOptions.Parameters.Length != 1) { throw new ArgumentException("parameters"); } instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(GreetingsOrchestration2), instanceId, int.Parse(ArgumentOptions.Parameters[0])).Result; break; case "Cron": // Sample Input: "0 12 * */2 Mon" instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(CronOrchestration), instanceId, (ArgumentOptions.Parameters != null && ArgumentOptions.Parameters.Length > 0) ? ArgumentOptions.Parameters[0] : null).Result; break; case "Average": // Sample Input: "1 50 10" if (ArgumentOptions.Parameters == null || ArgumentOptions.Parameters.Length != 3) { throw new ArgumentException("parameters"); } int[] input = ArgumentOptions.Parameters.Select(p => int.Parse(p)).ToArray(); instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(AverageCalculatorOrchestration), instanceId, input).Result; break; case "ErrorHandling": instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(ErrorHandlingOrchestration), instanceId, null).Result; break; case "SumOfSquares": instance = taskHubClient.CreateOrchestrationInstanceAsync( "SumOfSquaresOrchestration", "V1", instanceId, File.ReadAllText("SumofSquares\\BagOfNumbers.json"), new Dictionary <string, string>(1) { { "Category", "testing" } }).Result; break; case "Signal": instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(SignalOrchestration), instanceId, null).Result; break; case "SignalAndRaise": if (ArgumentOptions.Parameters == null || ArgumentOptions.Parameters.Length != 1) { throw new ArgumentException("parameters"); } instance = taskHubClient.CreateOrchestrationInstanceWithRaisedEventAsync(typeof(SignalOrchestration), instanceId, null, ArgumentOptions.Signal, ArgumentOptions.Parameters[0]).Result; break; case "Replat": instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(MigrateOrchestration), instanceId, new MigrateOrchestrationData { SubscriptionId = "03a1cd39-47ac-4a57-9ff5-a2c2a2a76088", IsDisabled = false }).Result; break; default: throw new Exception("Unsupported Orchestration Name: " + ArgumentOptions.StartInstance); } Console.WriteLine("Workflow Instance Started: " + instance); } else if (!string.IsNullOrWhiteSpace(ArgumentOptions.Signal)) { Console.WriteLine("Run RaiseEvent"); if (string.IsNullOrWhiteSpace(ArgumentOptions.InstanceId)) { throw new ArgumentException("instanceId"); } if (ArgumentOptions.Parameters == null || ArgumentOptions.Parameters.Length != 1) { throw new ArgumentException("parameters"); } string instanceId = ArgumentOptions.InstanceId; instance = new OrchestrationInstance { InstanceId = instanceId }; taskHubClient.RaiseEventAsync(instance, ArgumentOptions.Signal, ArgumentOptions.Parameters[0]).Wait(); Console.WriteLine("Press any key to quit."); Console.ReadLine(); } if (!ArgumentOptions.SkipWorker) { try { taskHub.AddTaskOrchestrations( typeof(GreetingsOrchestration), typeof(GreetingsOrchestration2), typeof(CronOrchestration), typeof(AverageCalculatorOrchestration), typeof(ErrorHandlingOrchestration), typeof(SignalOrchestration), typeof(MigrateOrchestration), typeof(SumOfSquaresOrchestration) ); taskHub.AddTaskOrchestrations( new NameValueObjectCreator <TaskOrchestration>("SumOfSquaresOrchestration", "V1", typeof(SumOfSquaresOrchestration))); taskHub.AddTaskActivities( new GetUserTask(), new SendGreetingTask(), new CronTask(), new ComputeSumTask(), new GoodTask(), new BadTask(), new CleanupTask(), new EmailTask(), new SumOfSquaresTask() ); taskHub.AddTaskActivitiesFromInterface <IManagementSqlOrchestrationTasks>(new ManagementSqlOrchestrationTasks()); taskHub.AddTaskActivitiesFromInterface <IMigrationTasks>(new MigrationTasks()); taskHub.StartAsync().Wait(); Console.WriteLine("Waiting up to 60 seconds for completion."); OrchestrationState taskResult = taskHubClient.WaitForOrchestrationAsync(instance, TimeSpan.FromSeconds(60), CancellationToken.None).Result; Console.WriteLine($"Task done: {taskResult?.OrchestrationStatus}"); 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}"); } } else { Console.WriteLine("Skip Worker"); } } }
/// <summary> /// This is the main entry point for your service replica. /// This method executes when this replica of your service becomes primary and has write status. /// </summary> /// <param name="cancellationToken">Canceled when Service Fabric needs to shut down this service replica.</param> protected override async Task RunAsync(CancellationToken cancellationToken) { try { var taskProvider = (new FabricOrchestrationProviderFactory(StateManager)).CreateProvider(); var taskHubClient = new TaskHubClient(taskProvider.OrchestrationServiceClient); var taskHub = new TaskHubWorker(taskProvider.OrchestrationService); OrchestrationInstance instance = null; var instanceId = Guid.NewGuid().ToString(); ServiceEventSource.Current.Message($"Start orchestration"); // instance = await taskHubClient.CreateOrchestrationInstanceAsync(typeof(CronOrchestration), instanceId, // "0 12 **/2 Mon"); int[] input = { 10, 50, 10 }; instance = await taskHubClient.CreateOrchestrationInstanceAsync(typeof(AverageCalculatorOrchestration), instanceId, input); // instance = await taskHubClient.CreateOrchestrationInstanceAsync(typeof(MigrateOrchestration), // instanceId, // new MigrateOrchestrationData // {SubscriptionId = "03a1cd39-47ac-4a57-9ff5-a2c2a2a76088", IsDisabled = false}); taskHub.AddTaskOrchestrations( typeof(CronOrchestration), typeof(AverageCalculatorOrchestration), typeof(ErrorHandlingOrchestration), typeof(SignalOrchestration), typeof(MigrateOrchestration)); taskHub.AddTaskActivities( new CronTask(), new ComputeSumTask(), new GoodTask(), new BadTask(), new CleanupTask()); taskHub.AddTaskActivitiesFromInterface <IManagementSqlOrchestrationTasks>( new ManagementSqlOrchestrationTasks()); taskHub.AddTaskActivitiesFromInterface <IMigrationTasks>(new MigrationTasks()); taskHub.StartAsync().Wait(); ServiceEventSource.Current.Message("Waiting up to 60 seconds for completion"); var taskResult = await taskHubClient.WaitForOrchestrationAsync(instance, TimeSpan.FromSeconds(60), CancellationToken.None); ServiceEventSource.Current.Message($"Task done: {taskResult.OrchestrationStatus}"); await taskHub.StopAsync(true); } catch (Exception ex) { ServiceEventSource.Current.Message($"worker exception: {ex}"); } }
static void Main(string[] args) { if (CommandLine.Parser.Default.ParseArgumentsStrict(args, options)) { string servicebusConnectionString = Program.GetSetting("ServiceBusConnectionString"); string storageConnectionString = Program.GetSetting("StorageConnectionString"); string taskHubName = ConfigurationManager.AppSettings["taskHubName"]; TaskHubClient taskHubClient = new TaskHubClient(taskHubName, servicebusConnectionString, storageConnectionString); TaskHubWorker taskHub = new TaskHubWorker(taskHubName, servicebusConnectionString, storageConnectionString); if (options.CreateHub) { taskHub.CreateHub(); } if (!string.IsNullOrWhiteSpace(options.StartInstance)) { string instanceId = options.InstanceId; OrchestrationInstance instance = null; switch (options.StartInstance) { case "Greetings": instance = taskHubClient.CreateOrchestrationInstance(typeof(GreetingsOrchestration), instanceId, null); break; case "Greetings2": if (options.Parameters == null || options.Parameters.Length != 1) { throw new ArgumentException("parameters"); } instance = taskHubClient.CreateOrchestrationInstance(typeof(GreetingsOrchestration2), instanceId, int.Parse(options.Parameters[0])); break; case "Cron": // Sample Input: "0 12 * */2 Mon" instance = taskHubClient.CreateOrchestrationInstance(typeof(CronOrchestration), instanceId, (options.Parameters != null && options.Parameters.Length > 0) ? options.Parameters[0] : null); break; case "Average": // Sample Input: "1 50 10" if (options.Parameters == null || options.Parameters.Length != 3) { throw new ArgumentException("parameters"); } int[] input = options.Parameters.Select(p => int.Parse(p)).ToArray(); instance = taskHubClient.CreateOrchestrationInstance(typeof(AverageCalculatorOrchestration), instanceId, input); break; case "ErrorHandling": instance = taskHubClient.CreateOrchestrationInstance(typeof(ErrorHandlingOrchestration), instanceId, null); break; case "Signal": instance = taskHubClient.CreateOrchestrationInstance(typeof(SignalOrchestration), instanceId, null); break; case "Replat": instance = taskHubClient.CreateOrchestrationInstance(typeof(MigrateOrchestration), instanceId, new MigrateOrchestrationData() { SubscriptionId = "03a1cd39-47ac-4a57-9ff5-a2c2a2a76088", IsDisabled = false }); break; default: throw new Exception("Unsupported Orchestration Name: " + options.StartInstance); } Console.WriteLine("Workflow Instance Started: " + instance); } else if (!string.IsNullOrWhiteSpace(options.Signal)) { if (string.IsNullOrWhiteSpace(options.InstanceId)) { throw new ArgumentException("instantceId"); } if (options.Parameters == null || options.Parameters.Length != 1) { throw new ArgumentException("parameters"); } string instanceId = options.InstanceId; OrchestrationInstance instance = new OrchestrationInstance { InstanceId = instanceId }; taskHubClient.RaiseEvent(instance, options.Signal, options.Parameters[0]); } if (!options.SkipWorker) { try { taskHub.AddTaskOrchestrations(typeof(GreetingsOrchestration), typeof(GreetingsOrchestration2), typeof(CronOrchestration), typeof (AverageCalculatorOrchestration), typeof (ErrorHandlingOrchestration), typeof (SignalOrchestration)); taskHub.AddTaskOrchestrations(typeof(MigrateOrchestration)); taskHub.AddTaskActivities(new GetUserTask(), new SendGreetingTask(), new CronTask(), new ComputeSumTask(), new GoodTask(), new BadTask(), new CleanupTask(), new EmailTask()); taskHub.AddTaskActivitiesFromInterface<IManagementSqlOrchestrationTasks>(new ManagementSqlOrchestrationTasks()); taskHub.AddTaskActivitiesFromInterface<IMigrationTasks>(new MigrationTasks()); taskHub.Start(); Console.WriteLine("Press any key to quit."); Console.ReadLine(); taskHub.Stop(true); } catch (Exception) { // silently eat any unhadled exceptions. } } } }
static void Main(string[] args) { if (CommandLine.Parser.Default.ParseArgumentsStrict(args, options)) { string servicebusConnectionString = Program.GetSetting("ServiceBusConnectionString"); string storageConnectionString = Program.GetSetting("StorageConnectionString"); string taskHubName = ConfigurationManager.AppSettings["taskHubName"]; TaskHubClient taskHubClient = new TaskHubClient(taskHubName, servicebusConnectionString, storageConnectionString); TaskHubWorker taskHub = new TaskHubWorker(taskHubName, servicebusConnectionString, storageConnectionString); if (options.CreateHub) { taskHub.CreateHub(); } if (!string.IsNullOrWhiteSpace(options.StartInstance)) { string instanceId = options.InstanceId; OrchestrationInstance instance = null; switch (options.StartInstance) { case "Greetings": instance = taskHubClient.CreateOrchestrationInstance(typeof(GreetingsOrchestration), instanceId, null); break; case "Greetings2": if (options.Parameters == null || options.Parameters.Length != 1) { throw new ArgumentException("parameters"); } instance = taskHubClient.CreateOrchestrationInstance(typeof(GreetingsOrchestration2), instanceId, int.Parse(options.Parameters[0])); break; case "Cron": // Sample Input: "0 12 * */2 Mon" instance = taskHubClient.CreateOrchestrationInstance(typeof(CronOrchestration), instanceId, (options.Parameters != null && options.Parameters.Length > 0) ? options.Parameters[0] : null); break; case "Average": // Sample Input: "1 50 10" if (options.Parameters == null || options.Parameters.Length != 3) { throw new ArgumentException("parameters"); } int[] input = options.Parameters.Select(p => int.Parse(p)).ToArray(); instance = taskHubClient.CreateOrchestrationInstance(typeof(AverageCalculatorOrchestration), instanceId, input); break; case "ErrorHandling": instance = taskHubClient.CreateOrchestrationInstance(typeof(ErrorHandlingOrchestration), instanceId, null); break; case "Signal": instance = taskHubClient.CreateOrchestrationInstance(typeof(SignalOrchestration), instanceId, null); break; case "Replat": instance = taskHubClient.CreateOrchestrationInstance(typeof(MigrateOrchestration), instanceId, new MigrateOrchestrationData() { SubscriptionId = "03a1cd39-47ac-4a57-9ff5-a2c2a2a76088", IsDisabled = false }); break; default: throw new Exception("Unsupported Orchestration Name: " + options.StartInstance); } Console.WriteLine("Workflow Instance Started: " + instance); } else if (!string.IsNullOrWhiteSpace(options.Signal)) { if (string.IsNullOrWhiteSpace(options.InstanceId)) { throw new ArgumentException("instantceId"); } if (options.Parameters == null || options.Parameters.Length != 1) { throw new ArgumentException("parameters"); } string instanceId = options.InstanceId; OrchestrationInstance instance = new OrchestrationInstance { InstanceId = instanceId }; taskHubClient.RaiseEvent(instance, options.Signal, options.Parameters[0]); } if (!options.SkipWorker) { try { taskHub.AddTaskOrchestrations(typeof(GreetingsOrchestration), typeof(GreetingsOrchestration2), typeof(CronOrchestration), typeof(AverageCalculatorOrchestration), typeof(ErrorHandlingOrchestration), typeof(SignalOrchestration)); taskHub.AddTaskOrchestrations(typeof(MigrateOrchestration)); taskHub.AddTaskActivities(new GetUserTask(), new SendGreetingTask(), new CronTask(), new ComputeSumTask(), new GoodTask(), new BadTask(), new CleanupTask(), new EmailTask()); taskHub.AddTaskActivitiesFromInterface <IManagementSqlOrchestrationTasks>(new ManagementSqlOrchestrationTasks()); taskHub.AddTaskActivitiesFromInterface <IMigrationTasks>(new MigrationTasks()); taskHub.Start(); Console.WriteLine("Press any key to quit."); Console.ReadLine(); taskHub.Stop(true); } catch (Exception) { // silently eat any unhadled exceptions. } } } }