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.