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

 

 

### VulnHub Bluesky 下载与实验 #### 关于VulnHub VulnHub是一个提供各种漏洞平台的综合靶场,用户可以在此下载多种虚拟机镜像,在本地通过VMware或者Oracle VM打开这些虚拟机,以游戏化的方式完成渗透测试、提权、漏洞利用以及代码审计等实战练习[^1]。 #### 寻找Bluesky虚拟机镜像 为了找到特定名为Bluesky的虚拟机镜像,建议访问[VulnHub官方网站](https://www.vulnhub.com/)并使用站内搜索功能输入关键词“Bluesky”。这将返回所有匹配项及其描述信息,从中可以选择合适的版本进行下载。值得注意的是,并不是所有的虚拟机都会直接命名为“Bluesky”,可能需要查看具体介绍来确认是否符合需求。 #### 设置实验环境 一旦获取到了所需的虚拟机文件,可以根据个人喜好选择Kali Linux作为操作系统的攻击端来进行渗透测试活动。对于目标机器而言,则应按照所选虚拟机的要求配置相应的操作系统环境。例如,如果选择了基于Windows的操作系统作为被测对象,那么可以在同一网络环境下设置一台运行Windows 7的企业版或专业版计算机作为目标主机,并确保两者都处于桥接模式下以便能够互相通信[^2]。 #### 安全实践中的应用 在实际的安全实践中,红队成员会模拟真实的攻击场景对内部网络实施全面审查;而蓝队则负责防御来自外部的各种潜在威胁。在这种背景下,利用如Bluesky这样的定制型虚拟机可以帮助团队更好地理解常见Web应用程序缺陷背后的工作原理,从而提升整体安全性水平[^4]。 ```bash # 如果计划在一个隔离环境中研究Bluesky项目,可考虑创建独立的Python工作区 python3 -m venv ~/bluesky-tutorial source ~/bluesky-tutorial/bin/activate ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DreamCatcher

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

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

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

打赏作者

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

抵扣说明:

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

余额充值