Zeebe 命令绑定说明
组件格式说明
要配置 Zeebe 命令绑定,请创建一个类型为 bindings.zeebe.command 的组件。请参考本指南了解如何创建和应用绑定配置。
有关 Zeebe 的更多信息,请查看此处的文档。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
spec:
type: bindings.zeebe.command
version: v1
metadata:
- name: gatewayAddr
value: "<host>:<port>"
- name: gatewayKeepAlive
value: "45s"
- name: usePlainTextConnection
value: "true"
- name: caCertificatePath
value: "/path/to/ca-cert"
元数据字段说明
| 字段 | 必需 | 绑定支持 | 详情 | 示例 |
|---|---|---|---|---|
gatewayAddr | Y | 输出 | Zeebe 网关地址 | "localhost:26500" |
gatewayKeepAlive | N | 输出 | 设置发送到网关的保活消息的频率。默认为 45 秒 | "45s" |
usePlainTextConnection | N | 输出 | 是否使用纯文本连接 | "true", "false" |
caCertificatePath | N | 输出 | CA 证书的路径 | "/path/to/ca-cert" |
绑定支持
此组件支持以下操作的输出绑定:
topologydeploy-processdeploy-resourcecreate-instancecancel-instanceset-variablesresolve-incidentpublish-messageactivate-jobscomplete-jobfail-jobupdate-job-retriesthrow-error
输出绑定
Zeebe 在此绑定中使用的客户端底层依赖 gRPC。请查阅 gRPC API 参考以获取更多信息。
topology
topology 操作用于获取网关所属集群的当前拓扑。
要执行 topology 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {},
"operation": "topology"
}
响应
绑定返回一个包含以下信息的 JSON:
{
"brokers": [
{
"nodeId": null,
"host": "172.18.0.5",
"port": 26501,
"partitions": [
{
"partitionId": 1,
"role": null,
"health": null
}
],
"version": "0.26.0"
}
],
"clusterSize": 1,
"partitionsCount": 1,
"replicationFactor": 1,
"gatewayVersion": "0.26.0"
}
响应值为:
brokers- 集群中的 broker 列表nodeId- broker 的唯一节点 IDhost- broker 的主机名port- broker 的端口partitions- 此 broker 管理或复制的分区列表partitionId- 分区的唯一 IDrole- broker 在此分区中的角色health- 分区的健康状况
version- broker 版本
clusterSize- 集群中的节点数量partitionsCount- 集群中分布的分区数量replicationFactor- 集群配置的复制因子gatewayVersion- 网关版本
deploy-process
deploy-process 的弃用别名为 ‘deploy-resource’。
deploy-resource
deploy-resource 操作用于将单个资源部署到 Zeebe。资源可以是流程(BPMN)或决策和决策需求(DMN)。
要执行 deploy-resource 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": "YOUR_FILE_CONTENT",
"metadata": {
"fileName": "products-process.bpmn"
},
"operation": "deploy-resource"
}
元数据参数为:
fileName- 资源文件的名称
响应
绑定返回一个包含以下信息的 JSON:
{
"key": 2251799813685252,
"deployments": [
{
"Metadata": {
"Process": {
"bpmnProcessId": "products-process",
"version": 2,
"processDefinitionKey": 2251799813685251,
"resourceName": "products-process.bpmn"
}
}
}
]
}
{
"key": 2251799813685253,
"deployments": [
{
"Metadata": {
"Decision": {
"dmnDecisionId": "products-approval",
"dmnDecisionName": "Products approval",
"version": 1,
"decisionKey": 2251799813685252,
"dmnDecisionRequirementsId": "Definitions_0c98xne",
"decisionRequirementsKey": 2251799813685251
}
}
},
{
"Metadata": {
"DecisionRequirements": {
"dmnDecisionRequirementsId": "Definitions_0c98xne",
"dmnDecisionRequirementsName": "DRD",
"version": 1,
"decisionRequirementsKey": 2251799813685251,
"resourceName": "products-approval.dmn"
}
}
}
]
}
响应值为:
key- 部署的唯一标识键deployments- 已部署资源的列表,例如流程metadata- 部署元数据,每个部署只有一个元数据process- 已部署流程的元数据bpmnProcessId- 部署期间解析的 bpmn 流程 ID;与版本一起构成特定流程定义的唯一标识符version- 分配的流程版本processDefinitionKey- 分配的键,作为此流程的唯一标识符resourceName- 解析此流程的资源名称
decision- 已部署决策的元数据dmnDecisionId- 部署期间解析的 dmn 决策 ID;与版本一起构成特定决策的唯一标识符dmnDecisionName- 部署期间解析的决策的 dmn 名称version- 分配的决策版本decisionKey- 分配的决策键,作为此决策的唯一标识符dmnDecisionRequirementsId- 部署期间解析的决策需求图的 dmn ID,此决策是其一部分decisionRequirementsKey- 此决策所属的决策需求图的分配键
decisionRequirements- 已部署决策需求的元数据dmnDecisionRequirementsId- 部署期间解析的 dmn 决策需求 ID;与版本一起构成特定决策的唯一标识符dmnDecisionRequirementsName- 部署期间解析的决策需求的 dmn 名称version- 分配的决策需求版本decisionRequirementsKey- 分配的决策需求键,作为此决策需求的唯一标识符resourceName- 解析此决策需求的资源名称
create-instance
create-instance 操作用于创建并启动指定流程的实例。可以使用其唯一键(由 deploy-process 操作返回)或使用 BPMN 流程 ID 和版本来指定要用于创建实例的流程定义。
请注意,只有具有无启动事件的流程才能通过此命令启动。
通常,流程创建和执行是解耦的。这意味着命令创建一个新的流程实例并立即响应流程实例 ID。流程的执行在响应发送后发生。然而,有些用例需要在流程执行完成时收集结果。通过定义 withResult 属性,命令允许“同步”执行流程并通过一组变量接收结果。响应在流程执行完成时发送。
有关更多信息,请访问官方文档。
要执行 create-instance 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"bpmnProcessId": "products-process",
"variables": {
"productId": "some-product-id",
"productName": "some-product-name",
"productKey": "some-product-key"
}
},
"operation": "create-instance"
}
{
"data": {
"processDefinitionKey": 2251799813685895,
"variables": {
"productId": "some-product-id",
"productName": "some-product-name",
"productKey": "some-product-key"
}
},
"operation": "create-instance"
}
{
"data": {
"bpmnProcessId": "products-process",
"variables": {
"productId": "some-product-id",
"productName": "some-product-name",
"productKey": "some-product-key"
},
"withResult": true,
"requestTimeout": "30s",
"fetchVariables": ["productId"]
},
"operation": "create-instance"
}
数据参数为:
bpmnProcessId- 要实例化的流程定义的 BPMN 流程 IDprocessDefinitionKey- 要实例化的流程定义的唯一键version- (可选,默认:最新版本)要实例化的流程版本variables- (可选)JSON 文档,将为流程实例的根变量范围实例化变量;它必须是一个 JSON 对象,因为变量将以键值对的方式映射。例如,{ “a”: 1, “b”: 2 } 将创建两个变量,分别命名为 “a” 和 “b”,并具有其关联的值。[{ “a”: 1, “b”: 2 }] 将不是有效参数,因为 JSON 文档的根是一个数组而不是对象withResult- (可选,默认:false)如果设置为 true,流程将被同步实例化和执行requestTimeout- (可选,仅在 withResult=true 时使用)如果流程在 requestTimeout 之前未完成,请求将被关闭。如果 requestTimeout = 0,则使用网关中配置的通用 requestTimeout。fetchVariables- (可选,仅在 withResult=true 时使用)要包含在响应的variables属性中的变量名称列表。如果为空,将返回根范围内的所有可见变量。
响应
绑定返回一个包含以下信息的 JSON:
{
"processDefinitionKey": 2251799813685895,
"bpmnProcessId": "products-process",
"version": 3,
"processInstanceKey": 2251799813687851,
"variables": "{\"productId\":\"some-product-id\"}"
}
响应值为:
processDefinitionKey- 用于创建流程实例的流程定义的键bpmnProcessId- 用于创建流程实例的流程定义的 BPMN 流程 IDversion- 用于创建流程实例的流程定义的版本processInstanceKey- 创建的流程实例的唯一标识符variables- (可选,仅在请求中使用了 withResult=true 时)JSON 文档,由根范围内的可见变量组成;作为序列化的 JSON 文档返回
cancel-instance
cancel-instance 操作用于取消正在运行的流程实例。
要执行 cancel-instance 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"processInstanceKey": 2251799813687851
},
"operation": "cancel-instance"
}
数据参数为:
processInstanceKey- 流程实例键
响应
绑定不返回响应正文。
set-variables
set-variables 操作用于为元素实例(例如流程实例、流程元素实例)创建或更新变量。
要执行 set-variables 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"elementInstanceKey": 2251799813687880,
"variables": {
"productId": "some-product-id",
"productName": "some-product-name",
"productKey": "some-product-key"
}
},
"operation": "set-variables"
}
数据参数为:
elementInstanceKey- 特定元素的唯一标识符;可以是流程实例键(在实例创建期间获得),或给定元素,例如服务任务(请参阅 job 消息上的 elementInstanceKey)local- (可选,默认:false)如果为 true,变量将严格合并到本地范围(由 elementInstanceKey 指示);这意味着变量不会传播到上层范围。 例如,假设我们有两个范围,‘1’ 和 ‘2’,每个范围的有效变量为: 1 =>{ "foo" : 2 },和 2 =>{ "bar" : 1 }。如果我们发送一个更新请求,elementInstanceKey = 2,变量{ "foo" : 5 },并且 local 为 true,那么范围 1 将保持不变,范围 2 将变为{ "bar" : 1, "foo" 5 }。然而,如果 local 为 false,那么范围 1 将为{ "foo": 5 },范围 2 将为{ "bar" : 1 }variables- 描述变量的键值对的 JSON 序列化文档;文档的根必须是一个对象
响应
绑定返回一个包含以下信息的 JSON:
{
"key": 2251799813687896
}
响应值为:
key- 设置变量命令的唯一键
resolve-incident
resolve-incident 操作用于解决一个事件。
要执行 resolve-incident 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"incidentKey": 2251799813686123
},
"operation": "resolve-incident"
}
数据参数为:
incidentKey- 要解决的事件的唯一 ID
响应
绑定不返回响应正文。
publish-message
publish-message 操作用于发布一条消息。消息发布到从其关联键计算出的特定分区。
要执行 publish-message 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"messageName": "product-message",
"correlationKey": "2",
"timeToLive": "1m",
"variables": {
"productId": "some-product-id",
"productName": "some-product-name",
"productKey": "some-product-key"
},
},
"operation": "publish-message"
}
数据参数为:
messageName- 消息的名称correlationKey- (可选)消息的关联键timeToLive- (可选)消息在 broker 上缓冲的时间messageId- (可选)消息的唯一 ID;可以省略。仅用于确保在其生命周期内只有一条具有给定 ID 的消息会被发布variables- (可选)消息变量作为 JSON 文档;要有效,文档的根必须是一个对象,例如 { “a”: “foo” }。[ “foo” ] 将不是有效的
响应
绑定返回一个包含以下信息的 JSON:
{
"key": 2251799813688225
}
响应值为:
key- 发布的消息的唯一 ID
activate-jobs
activate-jobs 操作以轮询方式遍历所有已知分区并激活最多请求的最大数量,并在激活时将其流式传输回客户端。
要执行 activate-jobs 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"jobType": "fetch-products",
"maxJobsToActivate": 5,
"timeout": "5m",
"workerName": "products-worker",
"fetchVariables": [
"productId",
"productName",
"productKey"
],
"requestTimeout": "30s"
},
"operation": "activate-jobs"
}
数据参数为:
jobType- 作业类型,如 BPMN 流程中定义的(例如<zeebe:taskDefinition type="fetch-products" />)maxJobsToActivate- 此请求要激活的最大作业数timeout- (可选,默认:5 分钟)此调用返回的作业在超时之前不会被另一个调用激活workerName- (可选,默认:default)激活作业的工作者的名称,主要用于日志记录目的fetchVariables- (可选)要作为作业变量获取的变量列表;如果为空,将返回作业范围内激活时的所有可见变量requestTimeout- (可选)请求将在至少一个作业被激活或在 requestTimeout 之后完成。如果 requestTimeout = 0,则使用默认超时。如果 requestTimeout < 0,则禁用长轮询,并且请求立即完成,即使没有作业被激活。
响应
绑定返回一个包含以下信息的 JSON:
[
{
"key": 2251799813685267,
"type": "fetch-products",
"processInstanceKey": 2251799813685260,
"bpmnProcessId": "products",
"processDefinitionVersion": 1,
"processDefinitionKey": 2251799813685249,
"elementId": "Activity_test",
"elementInstanceKey": 2251799813685266,
"customHeaders": "{\"process-header-1\":\"1\",\"process-header-2\":\"2\"}",
"worker": "test",
"retries": 1,
"deadline": 1694091934039,
"variables":"{\"productId\":\"some-product-id\"}"
}
]
响应值为:
key- 作业的键,作业的唯一标识符type- 作业的类型(应与请求的类型匹配)processInstanceKey- 作业的流程实例键bpmnProcessId- 作业流程定义的 bpmn 流程 IDprocessDefinitionVersion- 作业流程定义的版本processDefinitionKey- 作业流程定义的键elementId- 关联的任务元素 IDelementInstanceKey- 唯一标识关联任务的唯一键,在流程实例范围内唯一customHeaders- 在建模期间定义的一组自定义头;作为序列化的 JSON 文档返回worker- 激活此作业的工作者的名称retries- 此作业剩余的重试次数(应始终为正)deadline- 作业可以再次激活的时间,以 UNIX 纪元时间戳发送variables- 在激活时计算,由任务范围内的所有可见变量组成;作为序列化的 JSON 文档返回
complete-job
complete-job 操作使用给定的负载完成作业,从而允许完成关联的服务任务。
要执行 complete-job 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"jobKey": 2251799813686172,
"variables": {
"productId": "some-product-id",
"productName": "some-product-name",
"productKey": "some-product-key"
}
},
"operation": "complete-job"
}
数据参数为:
jobKey- 唯一的作业标识符,从激活作业响应中获得variables- (可选)表示当前任务范围内变量的 JSON 文档
响应
绑定不返回响应正文。
fail-job
fail-job 操作将作业标记为失败;如果重试参数为正,则作业将立即可再次激活,并且工作者可以再次尝试处理它。然而,如果为零或负数,则会引发事件,并标记为给定的错误消息,并且作业在事件解决之前不会被激活。
要执行 fail-job 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"jobKey": 2251799813685739,
"retries": 5,
"errorMessage": "some error occurred",
"retryBackOff": "30s",
"variables": {
"productId": "some-product-id",
"productName": "some-product-name",
"productKey": "some-product-key"
}
},
"operation": "fail-job"
}
数据参数为:
jobKey- 激活作业时获得的唯一作业标识符retries- 作业应剩余的重试次数errorMessage- (可选)描述作业失败原因的消息,这在作业用尽重试次数并引发事件时特别有用,因为此消息可以帮助解释为什么引发事件retryBackOff- (可选)下次重试的回退超时variables- (可选)JSON 文档,将在作业关联任务的本地范围内实例化变量;它必须是一个 JSON 对象,因为变量将以键值对的方式映射。例如,{ “a”: 1, “b”: 2 } 将创建两个变量,分别命名为 “a” 和 “b”,并具有其关联的值。[{ “a”: 1, “b”: 2 }] 将不是有效参数,因为 JSON 文档的根是一个数组而不是对象。
响应
绑定不返回响应正文。
update-job-retries
update-job-retries 操作用于更新作业剩余的重试次数。这对于作业用尽重试次数的情况特别有用,假设底层问题已解决。
要执行 update-job-retries 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"jobKey": 2251799813686172,
"retries": 10
},
"operation": "update-job-retries"
}
数据参数为:
jobKey- 通过 activate-jobs 操作获得的唯一作业标识符retries- 作业的新重试次数;必须为正
响应
绑定不返回响应正文。
throw-error
throw-error 操作用于抛出一个错误,以指示在处理作业时发生了业务错误。错误由错误代码标识,并由流程中具有相同错误代码的错误捕获事件处理。
要执行 throw-error 操作,请通过 POST 方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"jobKey": 2251799813686172,
"errorCode": "product-fetch-error",
"errorMessage": "The product could not be fetched",
"variables": {
"productId": "some-product-id",
"productName": "some-product-name",
"productKey": "some-product-key"
}
},
"operation": "throw-error"
}
数据参数为:
jobKey- 激活作业时获得的唯一作业标识符errorCode- 将与错误捕获事件匹配的错误代码errorMessage- (可选)提供附加上下文的错误消息variables- (可选)JSON 文档,将在作业关联任务的本地范围内实例化变量;它必须是一个 JSON 对象,因为变量将以键值对的方式映射。例如,{ “a”: 1, “b”: 2 } 将创建两个变量,分别命名为 “a” 和 “b”,并具有其关联的值。[{ “a”: 1, “b”: 2 }] 将不是有效参数,因为 JSON 文档的根是一个数组而不是对象。
响应
绑定不返回响应正文。