Route Based on Content (One-to-One)
A Processor that routes data based on its content will take one of two forms: Route an incoming FlowFile to exactly one destination, or route incoming data to 0 or more destinations. Here, we will discuss the first case.
This Processor has two relationships: matched
and
unmatched
. If a particular data format is expected, the Processor will
also have a failure
relationship that is used when the input is not of
the expected format. The Processor exposes a Property that indicates the routing
criteria.
If the Property that specifies routing criteria requires processing, such as compiling a
Regular Expression, this processing is done in a method annotated with
@OnScheduled
, if possible. The result is then stored in a member
variable that is marked as volatile
.
The onTrigger
method obtains a single FlowFile. The method reads the
contents of the FlowFile via the ProcessSession's read
method,
evaluating the Match Criteria as the data is streamed. The Processor then determines whether
the FlowFile should be routed to matched
or unmatched
based on whether or not the criteria matched, and routes the FlowFile to the appropriate
relationship.
The Processor then emits a Provenance ROUTE event indicating which Relationship to which the Processor routed the FlowFile.
This Processor is annotated with the @SideEffectFree
and
@SupportsBatching
annotations from the
org.apache.nifi.annotations.behavior
package.