...
The consumption ofMessageWithUnreachableHandlers is, in some way, similar to the way we are consuming TimedOutMessage objects in "Response Timeout" design. A synchronized collection of MessageWithUnreachableHandlers objects is hold by UCSControllerService. A new processor that polls from that collection and yields needs to be created.
The new processor [UCSProcessMessagesWithUnreachableHandlers?] will process each MessageWithUnreachableHandlers in the following way:
1.- if the reason of the MessageWithUnreachableHandlers being processed is ALL_HANDLERS, the processor will create a new FlowFile for each Message in the original Message's onFailureToReachAll property. These FlowFiles are then transfered to REL_ALL_HANDLERS.
2.- if the reason of the MessageWithUnreachableHandlers being processed is SOME_HANDLERS, the processor will create a new FlowFile for each Message in the original Message's onFailureToReachAny property. These FlowFiles are then transfer to REL_SOME_HANDLERS.
3.- if the reason of the MessageWithUnreachableHandlers being processed is ALL_HANDLERS and the original Message's onFailureToReachAll is empty OR if its reason is SOME_HANDLERS and the original Message's onFailureToReachAny is empty, an empty FlowFile is created and transfered to REL_NO_ALTERNATIVE_MESSAGE.
At this point, any Message sent through REL_ALL_HANDLERS and/or REL_SOME_HANDLERS can be treated by UCS as a regular incoming Message. This new processor can be then connected to the existing UCSValidateMessage processor in UCS workflow.
...