From 68f4570c2cbda0e716af88a56561f1cd4b9432b2 Mon Sep 17 00:00:00 2001 From: Mike Nguyen Date: Tue, 18 Feb 2025 20:07:13 +0000 Subject: [PATCH 1/2] docs(sdk): add basic workflow example Signed-off-by: Mike Nguyen --- .../en/go-sdk-docs/go-client/_index.md | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/daprdocs/content/en/go-sdk-docs/go-client/_index.md b/daprdocs/content/en/go-sdk-docs/go-client/_index.md index ad1e65a8..4218d2bc 100644 --- a/daprdocs/content/en/go-sdk-docs/go-client/_index.md +++ b/daprdocs/content/en/go-sdk-docs/go-client/_index.md @@ -88,6 +88,91 @@ resp, err = client.InvokeMethodWithContent(ctx, "app-id", "method-name", "post", For a full guide on service invocation, visit [How-To: Invoke a service]({{< ref howto-invoke-discover-services.md >}}). +### Workflows + +Workflows and their activities can be authored and managed using the Dapr Go SDK like so: + +```go +import ( +... +"github.com/dapr/go-sdk/workflow" +... +) + +func ExampleWorkflow(ctx *workflow.WorkflowContext) (any, error) { +var output string +input := "world" + +if err := ctx.CallActivity(ExampleActivity, workflow.ActivityInput(input)).Await(&output); err != nil { +return nil, err +} + +// Print output - "hello world" +fmt.Println(output) + +return nil, nil +} + +func ExampleActivity(ctx workflow.ActivityContext) (any, error) { +var input int +if err := ctx.GetInput(&input); err != nil { +return "", err +} + +return fmt.Sprintf("hello %s", input), nil +} + +func main() { +// Create a workflow worker +w, err := workflow.NewWorker() +if err != nil { +log.Fatalf("error creating worker: %v", err) +} + +// Register the workflow +w.RegisterWorkflow(ExampleWorkflow) + +// Register the activity +w.RegisterActivity(ExampleActivity) + +// Start workflow runner +if err := w.Start(); err != nil { +log.Fatal(err) +} + +// Create a workflow client +wfClient, err := workflow.NewClient() +if err != nil { +log.Fatal(err) +} + +// Start a new workflow +id, err := wfClient.ScheduleNewWorkflow(context.Background(), "ExampleWorkflow") +if err != nil { +log.Fatal(err) +} + +// Wait for the workflow to complete +metadata, err := wfClient.WaitForWorkflowCompletion(ctx, id) +if err != nil { +log.Fatal(err) +} + +// Print workflow status post-completion +fmt.Println(metadata.RuntimeStatus) + +// Shutdown Worker +w.Shutdown() +} +``` + +- For a more comprehensive guide on workflows visit these How-To guides: + - [How-To: Author a workflow]({{< ref howto-author-workflow.md >}}). + - [How-To: Manage a workflow]({{< ref howto-manage-workflow.md >}}). +- Visit the Go SDK Examples to jump into complete examples: + - [Workflow Example](https://github.com/dapr/go-sdk/tree/main/examples/workflow) + - [Workflow - Parallelised](https://github.com/dapr/go-sdk/tree/main/examples/workflow-parallel) + ### State Management For simple use-cases, Dapr client provides easy to use `Save`, `Get`, `Delete` methods: From c0d339c05bef7aaa163b2c1631c8c0ee6da97dc5 Mon Sep 17 00:00:00 2001 From: Mike Nguyen Date: Thu, 20 Feb 2025 18:30:55 +0000 Subject: [PATCH 2/2] docs: fix indentations Signed-off-by: Mike Nguyen --- .../en/go-sdk-docs/go-client/_index.md | 114 +++++++++--------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/daprdocs/content/en/go-sdk-docs/go-client/_index.md b/daprdocs/content/en/go-sdk-docs/go-client/_index.md index 4218d2bc..9561cb2a 100644 --- a/daprdocs/content/en/go-sdk-docs/go-client/_index.md +++ b/daprdocs/content/en/go-sdk-docs/go-client/_index.md @@ -100,69 +100,69 @@ import ( ) func ExampleWorkflow(ctx *workflow.WorkflowContext) (any, error) { -var output string -input := "world" - -if err := ctx.CallActivity(ExampleActivity, workflow.ActivityInput(input)).Await(&output); err != nil { -return nil, err -} - -// Print output - "hello world" -fmt.Println(output) - -return nil, nil + var output string + input := "world" + + if err := ctx.CallActivity(ExampleActivity, workflow.ActivityInput(input)).Await(&output); err != nil { + return nil, err + } + + // Print output - "hello world" + fmt.Println(output) + + return nil, nil } func ExampleActivity(ctx workflow.ActivityContext) (any, error) { -var input int -if err := ctx.GetInput(&input); err != nil { -return "", err -} - -return fmt.Sprintf("hello %s", input), nil + var input int + if err := ctx.GetInput(&input); err != nil { + return "", err + } + + return fmt.Sprintf("hello %s", input), nil } func main() { -// Create a workflow worker -w, err := workflow.NewWorker() -if err != nil { -log.Fatalf("error creating worker: %v", err) -} - -// Register the workflow -w.RegisterWorkflow(ExampleWorkflow) - -// Register the activity -w.RegisterActivity(ExampleActivity) - -// Start workflow runner -if err := w.Start(); err != nil { -log.Fatal(err) -} - -// Create a workflow client -wfClient, err := workflow.NewClient() -if err != nil { -log.Fatal(err) -} - -// Start a new workflow -id, err := wfClient.ScheduleNewWorkflow(context.Background(), "ExampleWorkflow") -if err != nil { -log.Fatal(err) -} - -// Wait for the workflow to complete -metadata, err := wfClient.WaitForWorkflowCompletion(ctx, id) -if err != nil { -log.Fatal(err) -} - -// Print workflow status post-completion -fmt.Println(metadata.RuntimeStatus) - -// Shutdown Worker -w.Shutdown() + // Create a workflow worker + w, err := workflow.NewWorker() + if err != nil { + log.Fatalf("error creating worker: %v", err) + } + + // Register the workflow + w.RegisterWorkflow(ExampleWorkflow) + + // Register the activity + w.RegisterActivity(ExampleActivity) + + // Start workflow runner + if err := w.Start(); err != nil { + log.Fatal(err) + } + + // Create a workflow client + wfClient, err := workflow.NewClient() + if err != nil { + log.Fatal(err) + } + + // Start a new workflow + id, err := wfClient.ScheduleNewWorkflow(context.Background(), "ExampleWorkflow") + if err != nil { + log.Fatal(err) + } + + // Wait for the workflow to complete + metadata, err := wfClient.WaitForWorkflowCompletion(ctx, id) + if err != nil { + log.Fatal(err) + } + + // Print workflow status post-completion + fmt.Println(metadata.RuntimeStatus) + + // Shutdown Worker + w.Shutdown() } ```