Grpc Api
El Gateway de Zeebe expone un servicio gRPC definido en
gateway.protoque es el punto de entrada principal para todas las operaciones del engine. Cubre deployment de recursos, instanciación de procesos, gestión de jobs, correlación de mensajes, señales, modificación de instancias en runtime, y consulta de topología del cluster. La misma funcionalidad está disponible via REST API HTTP en/v2/.
Servicio Gateway¶
El servicio gRPC Gateway define todos los RPCs disponibles. El gateway actúa como proxy stateless que enruta cada request a la partición correcta del cluster Zeebe según la partition key del recurso.
RPCs de deployment¶
DeployResource¶
Deploya uno o más recursos (procesos BPMN, decisiones DMN, formularios) al cluster.
- Request: lista de
Resourceconname(filename) ycontent(bytes del archivo). OpcionalmentetenantIdpara multi-tenancy. - Response:
deploymentKeyúnico, lista deDeploymentcon metadata de cada recurso deployado: - Para procesos:
bpmnProcessId,version,processDefinitionKey,resourceName,tenantId. - Para decisiones:
dmnDecisionId,dmnDecisionName,version,decisionKey,dmnDecisionRequirementsId,decisionRequirementsKey. - Para formularios:
formId,version,formKey,resourceName,tenantId.
Validación: el server parsea y valida cada recurso antes de aceptar el deployment. Si cualquier recurso es inválido, todo el deployment se rechaza atómicamente.
RPCs de process instances¶
CreateProcessInstance¶
Crea una nueva instancia de proceso de forma asíncrona (fire-and-forget).
- Request: identificación del proceso (
processDefinitionKeyObpmnProcessId+ opcionalmenteversion),variables(JSON string),tenantId, opcionalmentestartInstructions(lista deProcessInstanceCreationStartInstructionpara iniciar en un elemento específico en vez del start event),operationReference(correlación con operaciones externas). - Response:
processDefinitionKey,bpmnProcessId,version,processInstanceKey,tenantId.
CreateProcessInstanceWithResult¶
Crea una instancia y espera sincrónicamente a que complete, retornando las variables finales.
rpc CreateProcessInstanceWithResult(CreateProcessInstanceWithResultRequest) returns (CreateProcessInstanceWithResultResponse);
- Request: mismos campos que
CreateProcessInstancemásrequestTimeout(cuánto esperar antes de timeout) yfetchVariables(lista de nombres de variables a retornar; vacía = todas). - Response: misma metadata del proceso más
variables(JSON string con las variables finales del proceso).
Uso típico: procesos cortos o request-reply patterns donde el caller necesita el resultado.
ModifyProcessInstance¶
Modifica una instancia de proceso en ejecución: mueve tokens, agrega/elimina elementos activos.
- Request:
processInstanceKey, lista deactivateInstructions(elementos a activar, con variables y ancestor scope key opcionales), lista determinateInstructions(element instances a terminar por key),operationReference. - Response: vacío (success/failure indicado por status gRPC).
Caso de uso: reparación manual de instancias bloqueadas, testing, migración de procesos.
MigrateProcessInstance¶
Migra una instancia de proceso de una versión de la definición a otra.
- Request:
processInstanceKey,migrationPlancontargetProcessDefinitionKeyy lista deMappingInstruction(mapeo desourceElementId→targetElementId). - Response: vacío.
Restricciones: solo se pueden migrar elementos que existen en ambas versiones. Los element instances activos deben tener un mapping correspondiente.
CancelProcessInstance¶
Cancela una instancia de proceso en ejecución, terminando todos los element instances activos.
RPCs de jobs¶
ActivateJobs¶
Activa jobs disponibles para un worker (modelo pull/polling).
- Request:
type(tipo de job a activar),worker(nombre del worker),timeout(ms hasta que el job vuelve a ser activable),maxJobsToActivate,fetchVariable(lista de variables a incluir),requestTimeout(long polling: el server mantiene la conexión abierta hasta que hay jobs o se cumple el timeout),tenantIds(filtro multi-tenancy). - Response (stream): cada mensaje contiene una lista de
ActivatedJob.
StreamActivatedJobs¶
Conexión streaming persistente para recibir jobs a medida que se crean (modelo push).
- Request:
type,worker,timeout,fetchVariable,tenantIds. - Response: stream continuo de
ActivatedJobindividuales.
Ventaja sobre ActivateJobs: menor latencia (no hay polling interval), menor overhead de red. El server pushea jobs al worker inmediatamente cuando se crean.
CompleteJob¶
Marca un job como completado exitosamente.
- Request:
jobKey,variables(JSON con variables de resultado), opcionalmenteresult(JobResultcondenied: bool,corrections,statusCode). - Response: vacío.
El campo result con JobResult permite al worker indicar que el job fue denegado (por ejemplo, un user task que no cumple condiciones) o proveer correcciones, sin fallar el job.
FailJob¶
Marca un job como fallido con posibilidad de retry.
- Request:
jobKey,retries(retries restantes; 0 = crear incidente),errorMessage,retryBackOff(ms antes del próximo retry),variables(actualizar variables para el retry). - Response: vacío.
ThrowError¶
Lanza un error BPMN desde un job, activando error boundary events.
- Request:
jobKey,errorCode(matchea con el errorCode del boundary event),errorMessage,variables. - Response: vacío.
UpdateJobTimeout / UpdateJobRetries¶
Actualizan el timeout o retries de un job activo sin completarlo o fallarlo.
RPCs de mensajes y señales¶
PublishMessage¶
Publica un mensaje para correlación con message catch events o message start events.
- Request:
name(nombre del mensaje, matchea con la message definition),correlationKey(para correlacionar con la instancia correcta — usado como partition key),timeToLive(ms),messageId(idempotency key),variables,tenantId. - Response:
key,tenantId.
Correlación: el engine busca suscripciones activas que matcheen (name, correlationKey). Si encuentra una, entrega el mensaje. Si no, el mensaje se almacena en un buffer por el TTL esperando una suscripción futura.
CorrelateMessage¶
Versión síncrona de correlación que retorna el resultado inmediatamente.
- Response incluye
processInstanceKeyytenantIdsi el mensaje fue correlacionado.
BroadcastSignal¶
Emite una señal que activa todos los signal catch events y signal start events suscritos.
- Request:
signalName,variables,tenantId. - Response:
key,tenantId.
Diferencia con mensajes: las señales son broadcast (1:N), no tienen correlation key. Todos los catch events suscritos a esa señal se activan.
RPCs de decisiones¶
EvaluateDecision¶
Evalúa una decisión DMN directamente, sin necesidad de un proceso.
- Request:
decisionKeyOdecisionId,variables(input para la decisión),tenantId. - Response:
decisionKey,decisionId,decisionName,decisionVersion,decisionRequirementsId,decisionRequirementsKey,output(JSON con el resultado),evaluatedDecisions(lista de todas las decisiones evaluadas en la cadena DRG),failedDecisionId,failureMessage,tenantId.
RPCs de variables¶
SetVariables¶
Actualiza variables en el scope de un element instance.
- Request:
elementInstanceKey(scope donde escribir),variables(JSON),local(si true, escribe solo en el scope local; si false, propaga al scope más cercano que ya tiene la variable),operationReference. - Response:
key.
RPCs de topología¶
Topology¶
Consulta la topología actual del cluster.
- Response:
brokers(lista connodeId,host,port,partitionsconpartitionId,roleLEADER/FOLLOWER/INACTIVE,health),clusterSize,partitionsCount,replicationFactor,gatewayVersion.
Tipo de dato ActivatedJob¶
Estructura central retornada por ActivateJobs y StreamActivatedJobs:
| Campo | Tipo | Descripción |
|---|---|---|
key |
int64 | Key único del job |
type |
string | Tipo de job (matchea con la task definition) |
processInstanceKey |
int64 | Key de la instancia de proceso |
bpmnProcessId |
string | ID del proceso BPMN |
processDefinitionVersion |
int32 | Versión de la definición |
processDefinitionKey |
int64 | Key de la definición |
elementId |
string | ID del elemento BPMN que creó el job |
elementInstanceKey |
int64 | Key del element instance |
customHeaders |
string | JSON con custom headers del task definition |
worker |
string | Nombre del worker que activó el job |
retries |
int32 | Retries restantes |
deadline |
int64 | Timestamp Unix (ms) del deadline de este job |
variables |
string | JSON con las variables del scope |
tenantId |
string | Tenant del proceso |
jobKind |
JobKind enum | Tipo de job |
listenerEventType |
ListenerEventType enum | Tipo de evento listener (si aplica) |
JobKind enum¶
| Valor | Significado |
|---|---|
BPMN_ELEMENT |
Job creado por un elemento BPMN estándar (service task, send task, etc.) |
EXECUTION_LISTENER |
Job para un execution listener configurado en un elemento |
TASK_LISTENER |
Job para un task listener (en user tasks) |
AD_HOC_SUB_PROCESS |
Job creado por actividades dentro de un ad-hoc sub-process |
ListenerEventType enum¶
| Valor | Significado |
|---|---|
START |
Listener de inicio del elemento |
END |
Listener de fin del elemento |
COMPLETING |
Listener durante la fase de completación |
CREATING |
Listener durante la fase de creación |
CANCELING |
Listener durante la fase de cancelación |
ASSIGNING |
Listener de asignación (user tasks) |
UPDATING |
Listener de actualización (user tasks) |
Multi-tenancy¶
El soporte de multi-tenancy permea toda la API:
- Todos los requests de creación aceptan
tenantIdpara asignar un recurso a un tenant. - Los requests de consulta (ActivateJobs, StreamActivatedJobs) aceptan
tenantIds(lista) para filtrar. TenantFilterenum:PROVIDED(filtrar por los tenant IDs proporcionados) oASSIGNED(todos los tenants asignados al caller autenticado).- El tenant ID se propaga a todos los records derivados (process instances, jobs, variables, etc.).
REST API (/v2/)¶
La misma funcionalidad de la API gRPC está disponible via HTTP REST en el path base /v2/. El mapeo es directo:
| gRPC RPC | REST Endpoint | Método HTTP |
|---|---|---|
CreateProcessInstance |
/v2/process-instances |
POST |
CreateProcessInstanceWithResult |
/v2/process-instances (con header) |
POST |
CancelProcessInstance |
/v2/process-instances/{key} |
DELETE |
DeployResource |
/v2/deployments |
POST (multipart) |
ActivateJobs |
/v2/jobs/activation |
POST |
CompleteJob |
/v2/jobs/{key}/completion |
POST |
FailJob |
/v2/jobs/{key}/failure |
POST |
PublishMessage |
/v2/messages |
POST |
BroadcastSignal |
/v2/signals/broadcast |
POST |
Topology |
/v2/topology |
GET |
El REST API usa JSON en vez de Protobuf, facilitando integración con lenguajes/frameworks sin soporte gRPC nativo. Internamente, el gateway traduce entre REST y gRPC.