要配置 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" |
此组件支持以下操作的输出绑定:
topology
deploy-process
deploy-resource
create-instance
cancel-instance
set-variables
resolve-incident
publish-message
activate-jobs
complete-job
fail-job
update-job-retries
throw-error
Zeebe 在此绑定中使用的客户端底层依赖 gRPC。请查阅 gRPC API 参考以获取更多信息。
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-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
操作用于创建并启动指定流程的实例。可以使用其唯一键(由 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
操作,请通过 POST
方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"processInstanceKey": 2251799813687851
},
"operation": "cancel-instance"
}
数据参数为:
processInstanceKey
- 流程实例键绑定不返回响应正文。
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
操作,请通过 POST
方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"incidentKey": 2251799813686123
},
"operation": "resolve-incident"
}
数据参数为:
incidentKey
- 要解决的事件的唯一 ID绑定不返回响应正文。
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
- 发布的消息的唯一 IDactivate-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
操作,请通过 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
操作,请通过 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
操作,请通过 POST
方法调用 Zeebe 命令绑定,并使用以下 JSON 正文:
{
"data": {
"jobKey": 2251799813686172,
"retries": 10
},
"operation": "update-job-retries"
}
数据参数为:
jobKey
- 通过 activate-jobs 操作获得的唯一作业标识符retries
- 作业的新重试次数;必须为正绑定不返回响应正文。
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 文档的根是一个数组而不是对象。绑定不返回响应正文。