Skip to content

Commit 49e72ca

Browse files
authored
feat(go): migrated dynamic activities (#27)
1 parent 36f5c74 commit 49e72ca

4 files changed

Lines changed: 108 additions & 0 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dynamic
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"go.temporal.io/sdk/activity"
8+
"go.temporal.io/sdk/converter"
9+
)
10+
11+
// @@@SNIPSTART go-dynamic-activity-definition
12+
func DynamicActivity(ctx context.Context, args converter.EncodedValues) (string, error) {
13+
var arg1, arg2 string
14+
err := args.Get(&arg1, &arg2)
15+
if err != nil {
16+
return "", fmt.Errorf("failed to decode arguments: %w", err)
17+
}
18+
19+
info := activity.GetInfo(ctx)
20+
result := fmt.Sprintf("%s - %s - %s", info.WorkflowType.Name, arg1, arg2)
21+
22+
return result, nil
23+
}
24+
// @@@SNIPEND
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package dynamic_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/suite"
7+
"go.temporal.io/sdk/activity"
8+
"go.temporal.io/sdk/testsuite"
9+
10+
"my-org/quickstart/activities/dynamic"
11+
)
12+
13+
type DynamicActivityTestSuite struct {
14+
suite.Suite
15+
testsuite.WorkflowTestSuite
16+
}
17+
18+
func TestDynamicActivityTestSuite(t *testing.T) {
19+
suite.Run(t, new(DynamicActivityTestSuite))
20+
}
21+
22+
func (s *DynamicActivityTestSuite) Test_UnregisteredActivityRunsDynamicActivity() {
23+
env := s.NewTestWorkflowEnvironment()
24+
env.RegisterWorkflow(dynamic.CallUnregisteredActivityWorkflow)
25+
env.RegisterDynamicActivity(dynamic.DynamicActivity, activity.DynamicRegisterOptions{})
26+
27+
env.ExecuteWorkflow(dynamic.CallUnregisteredActivityWorkflow, "first", "second")
28+
s.True(env.IsWorkflowCompleted())
29+
s.NoError(env.GetWorkflowError())
30+
31+
var result string
32+
s.NoError(env.GetWorkflowResult(&result))
33+
s.Equal("CallUnregisteredActivityWorkflow - first - second", result)
34+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package main
2+
3+
import (
4+
"log"
5+
6+
"go.temporal.io/sdk/activity"
7+
"go.temporal.io/sdk/client"
8+
"go.temporal.io/sdk/worker"
9+
10+
"my-org/quickstart/activities/dynamic"
11+
)
12+
13+
func main() {
14+
temporalClient, err := client.Dial(client.Options{})
15+
if err != nil {
16+
log.Fatalln("Unable to create client", err)
17+
}
18+
defer temporalClient.Close()
19+
20+
w := worker.New(temporalClient, dynamic.TaskQueue, worker.Options{})
21+
w.RegisterWorkflow(dynamic.CallUnregisteredActivityWorkflow)
22+
// @@@SNIPSTART go-dynamic-activity-register
23+
w.RegisterDynamicActivity(dynamic.DynamicActivity, activity.DynamicRegisterOptions{})
24+
// @@@SNIPEND
25+
26+
if err := w.Run(worker.InterruptCh()); err != nil {
27+
log.Fatalln("Unable to start Worker", err)
28+
}
29+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package dynamic
2+
3+
import (
4+
"time"
5+
6+
"go.temporal.io/sdk/workflow"
7+
)
8+
9+
const TaskQueue = "dynamic-activity"
10+
11+
// CallUnregisteredActivityWorkflow calls an Activity Type that no Activity is
12+
// registered under, so the Worker runs the Dynamic Activity instead.
13+
func CallUnregisteredActivityWorkflow(ctx workflow.Context, arg1, arg2 string) (string, error) {
14+
ctx = workflow.WithActivityOptions(ctx, workflow.ActivityOptions{
15+
StartToCloseTimeout: 10 * time.Second,
16+
})
17+
18+
var result string
19+
err := workflow.ExecuteActivity(ctx, "UnregisteredActivityType", arg1, arg2).Get(ctx, &result)
20+
return result, err
21+
}

0 commit comments

Comments
 (0)