helix

Temporal

The temporal integration provides an opinionated way to interact with Temporal for workflow orchestration for helix services.

Trace attributes

The temporal integration sets the following trace attributes:

  • temporal.server.address
  • temporal.namespace
  • span.kind

When applicable, these attributes can be set as well:

  • temporal.worker.taskqueue
  • temporal.workflow.id
  • temporal.workflow.run_id
  • temporal.workflow.namespace
  • temporal.workflow.type
  • temporal.workflow.attempt
  • temporal.activity.id
  • temporal.activity.type
  • temporal.activity.attempt
  • temporal.schedule.id
  • temporal.search.query
  • temporal.signal.name

Example:

temporal.server.address: "temporal.mydomain.tld"
temporal.namespace: "default"
temporal.worker.taskqueue: "demo"
temporal.workflow.namespace: "default"
temporal.workflow.type: "hello_world"
temporal.workflow.attempt: 2
span.kind: "internal"

Usage

Install the Go module with:

$ go get go.nunchi.studio/helix/integration/temporal

Simple example on how to import, configure, and use the integration:

import (
  "go.nunchi.studio/helix/integration/temporal"
  "go.nunchi.studio/helix/service"

  "go.temporal.io/sdk/activity"
  "go.temporal.io/sdk/workflow"
)

func main() {
  cfg := temporal.Config{
    Address:   "localhost:7233",
    Namespace: "default",
    Worker: temporal.ConfigWorker{
      Enabled:   true,
      TaskQueue: "demo",
    },
  }

  _, w, err := temporal.Connect(cfg)
  if err != nil {
    return err
  }

  w.RegisterWorkflow(YourWorkflowDefinition, workflow.RegisterOptions{
    Name: "workflow",
  })

  w.RegisterActivity(YourSimpleActivityDefinition, activity.RegisterOptions{
    Name: "activity",
  })

  if err := service.Start(); err != nil {
    panic(err)
  }

  if err := service.Close(); err != nil {
    panic(err)
  }
}

Is something missing?

Built by
Nunchi