1、确保Temporal Server 运行
2、创建Workflow和Activity
package helloworld
import (
"context"
"go.temporal.io/sdk/activity"
"go.temporal.io/sdk/workflow"
"time"
)
// Workflow is a Hello World workflow definition
func Workflow(ctx workflow.Context,name string) (string,error){
ao := workflow.ActivityOptions{
StartToCloseTimeout: 10 * time.Second,
}
ctx = workflow.WithActivityOptions(ctx,ao)
logger := workflow.GetLogger(ctx)
logger.Info("Helloworld workflow started","name",name)
var result string
err := workflow.ExecuteActivity(ctx,Activity,name).Get(ctx,&result)
if err != nil {
logger.Error("Activity failed.","Error",err)
return "",err
}
logger.Info("Hello World workflow completed.","result",result)
return result,nil
}
func Activity(ctx context.Context,name string) (string,error){
logger := activity.GetLogger(ctx)
logger.Info("Activity","name",name)
return "Hello " + name + "!",nil
}
3、创建Worker,注册workflow和activity
package main
import (
"go.temporal.io/sdk/client"
"go.temporal.io/sdk/worker"
"log"
"temporal-samples-go/helloworld"
)
func main() {
// The client and worker are heavyweight objects that should be created once per process
c, err := client.NewClient(client.Options{
HostPort: "192.168.1.11:7233",//Temporal地址
})
if err != nil {
log.Fatalln("Unable to create client",err)
}
defer c.Close()
w := worker.New(c,"hello-world",worker.Options{})
w.RegisterWorkflow(helloworld.Workflow)
w.RegisterActivity(helloworld.Activity)
err = w.Run(worker.InterruptCh())
if err != nil {
log.Fatalln("Unable to start worker",err)
}
}
4、启动worker
5、start workflow
package main
import (
"context"
"go.temporal.io/sdk/client"
"log"
"temporal-samples-go/helloworld"
)
func main() {
// The client is a heavyweight object that should be created once per process.
c, err := client.NewClient(client.Options{
HostPort: "192.168.1.11:7233",
})
if err != nil {
log.Fatalln("Unable to create client",err)
}
defer c.Close()
workflowOptions := client.StartWorkflowOptions{
ID: "hello_world_workflowID",
TaskQueue: "hello-world",
}
we,err := c.ExecuteWorkflow(context.Background(),workflowOptions,helloworld.Workflow,"Temporal")
if err != nil {
log.Fatalln("Unable to execute workflow",err)
}
log.Println("Started workflow","WorkflowID",we.GetID(),"RunID",we.GetRunID())
// Synchronously wait for the workflow completion
var result string
err = we.Get(context.Background(), &result)
if err != nil {
log.Fatalln("Unable get workflow result",err)
}
log.Println("Workflow result:",result)
}
其中TaskQueue 要与Worker中定义的Queue名称一致
6、查看运行结果
7、通过WebUI查看工作流运行情况
8、通过RUNID可以查看工作流的运行状况,包括输入输出参数、运行结果、任务队列、历史事件等。