Temporal Go SDK samples:Hello World

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可以查看工作流的运行状况,包括输入输出参数、运行结果、任务队列、历史事件等。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamCatcher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值