# huaweicloud-dwr-sdk-demo-custom-go **Repository Path**: HuaweiCloudDeveloper/huaweicloud-dwr-sdk-demo-custom-go ## Basic Information - **Project Name**: huaweicloud-dwr-sdk-demo-custom-go - **Description**: 数据工坊(Data Workroom,DWR)是一款近数据处理服务,通过易用的数据处理工作流编排和开放生态的数据处理算子,能够在云上实现图像、视频、文档、图片等数据处理业务。本仓库演示了如何调用dwr-go-sdk来使用自定义函数创建工作流并获取工作流的执行结果。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master-dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-11-24 - **Last Updated**: 2025-06-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # huaweicloud-dwr-sdk-demo-go ## 1.介绍 本示例介绍了如何使用华为云DWR服务的Go SDK创建包含自定义算子的同步工作流,并触发工作流,获得自定义算子的响应内容。 ## 2.版本说明 本示例配套的SDK版本为v0.1.12 ## 3.准备工作 1. 参考华为云DWR开发工具包(SDK) 引入 DWR Go SDK 2. 要使用华为云DWR Go SDK,您需要拥有华为云账号以及该账号对应的 Access Key(AK)和 Secret Access Key(SK)。 3. 获取您期望使用的目标终端节点(参考[华为云DWR endpoint列表](https://developer.huaweicloud.com/endpoint)) 4. 示例工作流创建时使用自定义算子,需要先创建好函数得到函数URN(参考[FunctionGraph创建函数](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_1441.html)) 5. 华为云 DWR Go SDK 需要运行在 Go 1.14 及以上版本。 ## 4.示例代码 1. 构造client ``` client := dwr.NewDwrClient( dwr.DwrClientBuilder(). WithEndpoint(endpoint). WithCredential( basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). Build()). WithHttpConfig(config.DefaultHttpConfig(). WithIgnoreSSLVerification(true). WithHttpHandler(httphandler.NewHttpHandler().AddResponseHandler(func(response http.Response) { fmt.Println(response.Header) }))). Build()) ``` 2. 创建工作流 ``` createResponse, err := client.CreateWorkflow(&model.CreateWorkflowRequest{ GraphName: workflowName, Body: &model.CreateWorkflowRequestBody{ States: &[]model.State{{ Type: model.GetStateTypeEnum().END, StateName: endState, }, { Start: &start, Type: model.GetStateTypeEnum().OPERATION, PayloadFilterIn: &payloadFilter, PayloadFilterOut: &payloadFilter, StateName: "Custom", ActionMode: &actionMode, Actions: &[]model.Action{{ ActionName: "Custom", ActionAgency: "", Function: functionUrn, FunctionTemplate: "", ActionTemplateCategory: &templateCategory, InvocationMode: "SYNC", Timeout: 30, PayloadFilter: &payloadFilter, DynamicSource: map[string]interface{}{}, }}, NextState: &endState, }}, Description: &description, Mode: &mode, ExpressConfig: &model.ExpressConfig{ SupportAnonymous: &supportAnonymous, }, }, }) ``` 3. 触发工作流 ``` response, err := http.Get(fmt.Sprintf("%s?x-workflow-graph-name=%s", objectUrl, workflowName)) if err != nil { fmt.Printf("failed to execute workflow: %s", err.Error()) return } defer func() { err := response.Body.Close() if err != nil { fmt.Printf("failed to close res body\n") } }() data, err := ioutil.ReadAll(response.Body) if err != nil { fmt.Printf("failed to read response, err: %s", err.Error()) return } fmt.Printf("response: %s\n", string(data)) ``` ## 5.备注 自定义算子的返回值需要满足一定的规范才能通过同步工作流返回,具体参考[DWR算子支持同步工作流](https://support.huaweicloud.com/usermanual-dwr/dwr_03_0003.html#section1)。 ## 6.参考 更多信息请参考[DWR数据工坊](https://support.huaweicloud.com/dwr/index.html) ## 7.修订记录 | 发布日期 | 文档版本 | 修订说明| |-|-|-| | 2022-11-25 | 1.0 | 文档首次发布 |