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 <mregxn@gmail.com>
  • Loading branch information
MregXN committed Dec 8, 2023
1 parent 10ef818 commit 45e63cf
Show file tree
Hide file tree
Showing 4 changed files with 96 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);
}
}
}
32 changes: 32 additions & 0 deletions examples/Workflow/WorkflowFanOutFanIn/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Dapr.Client;
using Dapr.Workflow;
using WorkflowFanOutFanIn.Activities;
using WorkflowFanOutFanIn.Workflows;

const string DaprWorkflowComponent = "dapr";

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


DaprClient daprClient = new DaprClientBuilder().Build();

// Wait for the sidecar to become available
while (!await daprClient.CheckHealthAsync())
{
Thread.Sleep(TimeSpan.FromSeconds(5));
}

using (daprClient)
{
await daprClient.StartWorkflowAsync(
workflowComponent: DaprWorkflowComponent,
workflowName: nameof(WorkflowFanOutFanIn));

}
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>
28 changes: 28 additions & 0 deletions examples/Workflow/WorkflowFanOutFanIn/Workflows/DemoWorkflow.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
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)
{
Console.WriteLine("Workflow Started.");
Task<string> t1 =context.CallActivityAsync(nameof(NotifyActivity),"calling task 1 ...");
Task<string> t2 =context.CallActivityAsync(nameof(NotifyActivity),"calling task 2 ...");
Task<string> t3 =context.CallActivityAsync(nameof(NotifyActivity),"calling task 3 ...");
await Task.WhenAll(t1, t2, t3);

Console.WriteLine("Workflow Completed.");
return "Workflow Completed.";
}
}
}

0 comments on commit 45e63cf

Please sign in to comment.