Skip to content

Commit

Permalink
add fan-out-fan-in sample
Browse files Browse the repository at this point in the history
Signed-off-by: MregXN <[email protected]>
  • Loading branch information
MregXN committed Dec 8, 2023
1 parent 10ef818 commit 7cc3b66
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 0 deletions.
22 changes: 22 additions & 0 deletions examples/Workflow/WorkflowFanOutFanIn/Activities/NotifyActivity.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using Dapr.Workflow;
using Microsoft.Extensions.Logging;

namespace WorkflowFanOutFanIn.Activities
{
public class NotifyActivity : WorkflowActivity<string, object>
{
readonly ILogger logger;

public NotifyActivity(ILoggerFactory loggerFactory)
{
this.logger = loggerFactory.CreateLogger<NotifyActivity>();
}

public override Task<object> RunAsync(WorkflowActivityContext context, string message)
{
this.logger.LogInformation(message);

return Task.FromResult<object>(null);
}
}
}
55 changes: 55 additions & 0 deletions examples/Workflow/WorkflowFanOutFanIn/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using Dapr.Client;
using Dapr.Workflow;
using WorkflowFanOutFanIn.Activities;
using WorkflowFanOutFanIn.Workflows;
using Microsoft.Extensions.Hosting;

const string DaprWorkflowComponent = "dapr";

var builder = Host.CreateDefaultBuilder(args).ConfigureServices(services =>
{
services.AddDaprWorkflow(options =>
{
options.RegisterWorkflow<DemoWorkflow>();
options.RegisterActivity<NotifyActivity>();
});
});

Console.WriteLine("SetEnvironmentVariable");
if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DAPR_GRPC_PORT")))
{
Environment.SetEnvironmentVariable("DAPR_GRPC_PORT", "4001");
}

// Start the app - this is the point where we connect to the Dapr sidecar to
// listen for workflow work-items to execute.
using var host = builder.Build();
host.Start();

Console.WriteLine("Init Client");
DaprClient daprClient = new DaprClientBuilder().Build();

Console.WriteLine("Wait for the sidecar to become available");

while (!await daprClient.CheckHealthAsync())
{
Thread.Sleep(TimeSpan.FromSeconds(5));
}

using (daprClient)
{
// Start the workflow
Console.WriteLine("Starting workflow...");
await daprClient.WaitForSidecarAsync();

await daprClient.StartWorkflowAsync(
workflowComponent: DaprWorkflowComponent,
workflowName: nameof(WorkflowFanOutFanIn),
instanceId: "demo-workflow1",
input: "test input");


await daprClient.WaitForWorkflowCompletionAsync(
workflowComponent: DaprWorkflowComponent,
instanceId: "demo-workflow1");
}
14 changes: 14 additions & 0 deletions examples/Workflow/WorkflowFanOutFanIn/WorkflowFanOutFanIn.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">

<ItemGroup>
<ProjectReference Include="..\..\..\src\Dapr.Workflow\Dapr.Workflow.csproj" />
</ItemGroup>

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<NoWarn>612,618</NoWarn>
</PropertyGroup>

</Project>
37 changes: 37 additions & 0 deletions examples/Workflow/WorkflowFanOutFanIn/Workflows/DemoWorkflow.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Dapr.Workflow;
using WorkflowFanOutFanIn.Activities;

namespace WorkflowFanOutFanIn.Workflows
{
public class DemoWorkflow : Workflow<string, string>
{
readonly WorkflowTaskOptions defaultActivityRetryOptions = new WorkflowTaskOptions
{
// NOTE: Beware that changing the number of retries is a breaking change for existing workflows.
RetryPolicy = new WorkflowRetryPolicy(
maxNumberOfAttempts: 3,
firstRetryInterval: TimeSpan.FromSeconds(5)),
};

public override async Task<string> RunAsync(WorkflowContext context, string input)
{
// Console.WriteLine("Workflow Started.");
// try
// {
// Task t1 =context.CallActivityAsync(nameof(NotifyActivity),"calling task 1 ...");
// Task t2 =context.CallActivityAsync(nameof(NotifyActivity),"calling task 2 ...");
// Task t3 =context.CallActivityAsync(nameof(NotifyActivity),"calling task 3 ...");
// await Task.WhenAll(t1, t2, t3);
// }
// catch (Exception ex)
// {
// Console.WriteLine("error!");
// Console.WriteLine(ex.Message);
// Console.WriteLine("error!");
// }
await context.CreateTimer(TimeSpan.FromSeconds(5));
Console.WriteLine("Workflow Completed.");
return "Workflow Completed.";
}
}
}

0 comments on commit 7cc3b66

Please sign in to comment.