首页 >后端开发 >Golang >无法从 GoLang 运行 Cadence 工作流程

无法从 GoLang 运行 Cadence 工作流程

WBOY
WBOY转载
2024-02-09 08:03:171280浏览

无法从 GoLang 运行 Cadence 工作流程

据php小编香蕉了解,最近有用户反映在GoLang环境中无法成功运行Cadence工作流程。Cadence是一款强大的分布式工作流引擎,但在GoLang环境下可能会遇到一些问题。这些问题可能涉及到配置、版本兼容性等方面。如果你也遇到类似的问题,不妨尝试检查配置和版本兼容性,或者查阅官方文档和社区讨论,以获取更多解决方案。

问题内容

我对 cadence 很陌生,正在尝试实现 hello world,但出现了以下错误

2023-10-05T10:30:50.695+0530    INFO    internal/internal_worker.go:834 Started Workflow Worker {"Domain": "test-domain", "TaskList": "cadence-samples-worker", "WorkerID": "[email protected]@cadence-samples-worker@256dcb1f-1769-4183-9604-174160f79e7a"}
2023-10-05T10:30:50.724+0530    INFO    internal/internal_worker.go:859 Started Activity Worker {"Domain": "test-domain", "TaskList": "cadence-samples-worker", "WorkerID": "[email protected]@cadence-samples-worker@256dcb1f-1769-4183-9604-174160f79e7a"}
2023-10-05T10:30:50.724+0530    INFO    cadence-test/worker.go:49       Started Worker. {"worker": "cadence-samples-worker"}
2023-10-05T10:30:50.724+0530    ERROR   cadence-test/trigger.go:32      Failed to create workflow       {"error": "BadRequestError{Message: missing TTL}"}

下面是我的 Go 代码

func startWorkflow() {
    // This workflow ID can be user business logic identifier as well.
    workflowID := "cron_" + uuid.New().String()
    startTime := int32(60)
    domainName := "test-domain"

    logger, workflowClient := BuildLogger(), BuildCadenceClient()

    startRequest := shared.StartWorkflowExecutionRequest{
        WorkflowId: &workflowID,
        Domain:     &domainName,
        TaskList: &shared.TaskList{
            Name: &domainName,
        },
        ExecutionStartToCloseTimeoutSeconds: &startTime,
        TaskStartToCloseTimeoutSeconds:      &startTime,
        //DecisionTaskStartToCloseTimeout: time.Minute,

    }

    we, err := workflowClient.StartWorkflowExecution(context.Background(), &startRequest)
    if err != nil {
        logger.Error("Failed to create workflow", zap.Error(err))
        panic("Failed to create workflow.")
    } else {
        logger.Info("Started Workflow", zap.String("WorkflowID", *we.RunId), zap.String("RunID", *we.RunId))
    }
}

这些是我的 go.mod 中的依赖项

module cadence-test

go 1.21

require (
    github.com/google/uuid v1.3.0
    github.com/uber-go/tally v3.3.15+incompatible
    github.com/uber/cadence-idl v0.0.0-20230905165949-03586319b849
    go.uber.org/cadence v1.0.2
    go.uber.org/yarpc v1.70.4
    go.uber.org/zap v1.13.0
)

require (
    github.com/BurntSushi/toml v0.4.1 // indirect
    github.com/apache/thrift v0.16.0 // indirect
    github.com/beorn7/perks v1.0.1 // indirect
    github.com/cespare/xxhash/v2 v2.1.1 // indirect
    github.com/cristalhq/jwt/v3 v3.1.0 // indirect
    github.com/davecgh/go-spew v1.1.1 // indirect
    github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect
    github.com/go-ole/go-ole v1.2.6 // indirect
    github.com/gogo/googleapis v1.3.2 // indirect
    github.com/gogo/protobuf v1.3.2 // indirect
    github.com/gogo/status v1.1.0 // indirect
    github.com/golang/mock v1.6.0 // indirect
    github.com/golang/protobuf v1.5.2 // indirect
    github.com/google/go-cmp v0.5.8 // indirect
    github.com/kr/pretty v0.3.0 // indirect
    github.com/marusama/semaphore/v2 v2.5.0 // indirect
    github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
    github.com/opentracing/opentracing-go v1.2.0 // indirect
    github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709 // indirect
    github.com/pmezard/go-difflib v1.0.0 // indirect
    github.com/prometheus/client_golang v1.11.1 // indirect
    github.com/prometheus/client_model v0.2.0 // indirect
    github.com/prometheus/common v0.26.0 // indirect
    github.com/prometheus/procfs v0.6.0 // indirect
    github.com/robfig/cron v1.2.0 // indirect
    github.com/shirou/gopsutil v3.21.11+incompatible // indirect
    github.com/stretchr/objx v0.5.0 // indirect
    github.com/stretchr/testify v1.8.1 // indirect
    github.com/tklauser/go-sysconf v0.3.11 // indirect
    github.com/tklauser/numcpus v0.6.0 // indirect
    github.com/uber-go/mapdecode v1.0.0 // indirect
    github.com/uber/tchannel-go v1.33.0 // indirect
    github.com/yusufpapurcu/wmi v1.2.3 // indirect
    go.uber.org/atomic v1.10.0 // indirect
    go.uber.org/dig v1.10.0 // indirect
    go.uber.org/fx v1.13.1 // indirect
    go.uber.org/multierr v1.6.0 // indirect
    go.uber.org/net/metrics v1.3.0 // indirect
    go.uber.org/thriftrw v1.29.2 // indirect
    golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e // indirect
    golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
    golang.org/x/mod v0.8.0 // indirect
    golang.org/x/net v0.14.0 // indirect
    golang.org/x/sys v0.11.0 // indirect
    golang.org/x/text v0.12.0 // indirect
    golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
    golang.org/x/tools v0.6.0 // indirect
    google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad // indirect
    google.golang.org/grpc v1.47.0 // indirect
    google.golang.org/protobuf v1.28.0 // indirect
    gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
    gopkg.in/yaml.v2 v2.4.0 // indirect
    gopkg.in/yaml.v3 v3.0.1 // indirect
    honnef.co/go/tools v0.3.2 // indirect
)

有人可以帮忙吗?

解决方法

问题来自这一行 we, err :=workflowClient.StartWorkflowExecution(context.Background(), &startRequest)

这实际上不是 Cadence 问题,而是 yarpc 问题。 yarpc 需要一个带有超时的上下文,因此如果您更改为使用 context.WithTimeout,您应该解决第一个问题。

我注意到的另一个问题是,在请求中,您可能会错过 RequestID 字段。它必须是 UUID,因此简单地传递字符串是行不通的。但是,如果您使用Cadence CLI直接调用工作流程,则不需要指定它们。 CLI 简化了一些输入参数,这种不一致是预料之中的。

以上是无法从 GoLang 运行 Cadence 工作流程的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除