-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathFunctions.cs
More file actions
80 lines (67 loc) · 2.98 KB
/
Functions.cs
File metadata and controls
80 lines (67 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.DurableTask;
using Microsoft.DurableTask.Client;
using Microsoft.Extensions.Logging;
namespace DistributedTracing;
public static class Functions
{
[Function("StartOrchestration")]
public static async Task<HttpResponseData> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req,
[DurableClient] DurableTaskClient client,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger("StartOrchestration");
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(
nameof(OrderOrchestration), "Order-12345");
logger.LogInformation("Started orchestration with ID = '{instanceId}'.", instanceId);
return await client.CreateCheckStatusResponseAsync(req, instanceId);
}
[Function(nameof(OrderOrchestration))]
public static async Task<string> OrderOrchestration(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
var logger = context.CreateReplaySafeLogger(nameof(OrderOrchestration));
logger.LogInformation("Starting order processing orchestration");
var validated = await context.CallActivityAsync<string>(nameof(ValidateOrder), "Order-12345");
var paid = await context.CallActivityAsync<string>(nameof(ProcessPayment), validated);
var shipped = await context.CallActivityAsync<string>(nameof(ShipOrder), paid);
var result = await context.CallActivityAsync<string>(nameof(SendNotification), shipped);
logger.LogInformation("Order processing completed: {Result}", result);
return result;
}
[Function(nameof(ValidateOrder))]
public static string ValidateOrder(
[ActivityTrigger] string orderId, FunctionContext context)
{
var logger = context.GetLogger(nameof(ValidateOrder));
logger.LogInformation("Validating order: {OrderId}", orderId);
return $"Validated({orderId})";
}
[Function(nameof(ProcessPayment))]
public static string ProcessPayment(
[ActivityTrigger] string input, FunctionContext context)
{
var logger = context.GetLogger(nameof(ProcessPayment));
logger.LogInformation("Processing payment for: {Input}", input);
return $"Paid({input})";
}
[Function(nameof(ShipOrder))]
public static string ShipOrder(
[ActivityTrigger] string input, FunctionContext context)
{
var logger = context.GetLogger(nameof(ShipOrder));
logger.LogInformation("Shipping: {Input}", input);
return $"Shipped({input})";
}
[Function(nameof(SendNotification))]
public static string SendNotification(
[ActivityTrigger] string input, FunctionContext context)
{
var logger = context.GetLogger(nameof(SendNotification));
logger.LogInformation("Notifying: {Input}", input);
return $"Notified({input})";
}
}