Package io.camunda.zeebe.engine.api
Interface RecordProcessor
- All Known Implementing Classes:
Engine
public interface RecordProcessor
Interface for record processors. A record processor is responsible for handling a single record.
(The class
StreamProcessor in turn is responsible for handling a stream of records.-
Method Summary
Modifier and TypeMethodDescriptionbooleanReturns true if the processor is responsible for processing a record with the given valueType.voidinit(RecordProcessorContext recordProcessorContext) Called by platform to initialize the processoronProcessingError(Throwable processingException, TypedRecord record, ProcessingResultBuilder processingResultBuilder) Called by platform when a processing error occurred.process(TypedRecord record, ProcessingResultBuilder processingResultBuilder) Called by platform to process a single record.voidreplay(TypedRecord record) Called by platform in order to replay a single record
-
Method Details
-
init
Called by platform to initialize the processor- Parameters:
recordProcessorContext- context object to initialize the processor
-
accepts
Returns true if the processor is responsible for processing a record with the given valueType. If it returns true, thenprocess(TypedRecord, ProcessingResultBuilder)andreplay(TypedRecord)must successfully process or replay the record with the given valueType. The processor can also choose to skip the record depending on the intent of the record.If it returns false,
process(TypedRecord, ProcessingResultBuilder)* andreplay(TypedRecord)with the given valueType will not be called.- Parameters:
valueType- valueType of a record- Returns:
- true or false
-
replay
Called by platform in order to replay a single recordContract
- Record will be an event
- Will be called before processing is called
- Implementors can write to the database. Transaction is provided by platform, which also takes care of lifecycle of the transaction
- Implementors must not write to the log stream
- Implementors must not schedule post commit tasks
- Parameters:
record- the record to replay
-
process
Called by platform to process a single record.Contract
- Record will be a command
- Will be called after replay is called
- Implementors can write to the database. Transaction is provided by platform, which also takes care of lifecycle of the transaction
- Implementors must ensure that if they generate follow up events, these are applied to the database while this method is called
- Implementors can produce follow up commands and events, client responses and on commit
tasks via
processingResultBuilder - Implementors can indicate that the record should be skipped by returning
EmptyProcessingResult.INSTANCE
- Returns:
- the result of the processing; must be generated via
processingResultBuilder.build()
-
onProcessingError
ProcessingResult onProcessingError(Throwable processingException, TypedRecord record, ProcessingResultBuilder processingResultBuilder) Called by platform when a processing error occurred.Contract
- Record will be a command
- Will be called if an uncaught exception is thrown in
process(TypedRecord, ProcessingResultBuilder), or when an uncaught exception is thrown by the ProcessingStateMachine while committing the transaction - Implementors can write to the database. Transaction is provided by platform, which also takes care of lifecycle of the transaction
- Implementors must ensure that if they generate follow up events, these are applied to the database while this method is called
- Implementors can produce follow up commands, events and rejections, client responses and
on commit tasks via
processingResultBuilder - Implementors are responsible for error logging when needed
- Returns:
- the result of the processing; must be generated via
ProcessingResultBuilder processingResultBuilder
-