public async Task <OrchestrationResultModel> RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context) { //Retrieve message from trigger to consume var orchestratorAction = context.GetInput <OrchestrationActionModel>(); OrchestrationResultModel result = null; try { //Determine the action to take and generate a result var activity = orchestratorAction.Event switch { SubscriptionEvent.Create => Constants.DurableActivity.Create, SubscriptionEvent.Update => Constants.DurableActivity.Update, SubscriptionEvent.Suspend => Constants.DurableActivity.Suspend, SubscriptionEvent.Delete => Constants.DurableActivity.Delete, SubscriptionEvent.Reinstate => Constants.DurableActivity.Reinstate, _ => throw new NotImplementedException("No handler for orchestration event.") }; //Call the correct activity based on the orchestration event result = await context.CallActivityAsync <OrchestrationResultModel>(activity, orchestratorAction); } catch (Exception ex) { //Catch any exceptions so that a response can be sent back to Stactize. //This ensures the system is up to date and relevent client/administrator emails are sent result = orchestratorAction.CreateFailedResult(new FailureMessageModel { FriendlyMessage = $"Oops! Something went wrong while trying to action against subscription with Id {orchestratorAction.SubscriptionId}", DetailedMessage = ex.Message }); } //Call the CompleteAction activity to send the response back to Stactize await context.CallActivityAsync(Constants.DurableActivity.CompleteAction, result); //Return result for logging and information purposes return(result); }
public async Task CompleteOrchestratorAction([ActivityTrigger] OrchestrationResultModel orchestrationResult, ILogger log) { log.LogInformation($"Completing orchestration action for subscription with Id {orchestrationResult.SubscriptionId}"); await _serviceBusService.SendResultToStactize(orchestrationResult); }
public async Task SendResultToStactize(OrchestrationResultModel result) { await _queueClient.SendAsync(new Message(UTF8Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(result)))); }