Steve Storck created CAMEL-17154:
------------------------------------

             Summary: Create alternate dynamic router implementation that 
allows registration
                 Key: CAMEL-17154
                 URL: https://issues.apache.org/jira/browse/CAMEL-17154
             Project: Camel
          Issue Type: New Feature
          Components: camel-core
    Affects Versions: Future
            Reporter: Steve Storck
            Assignee: Steve Storck


Since the current Dynamic Router processor is missing the implementation of 
some key concepts (including a control channel, and recipient registration), I 
need an alternate implementation of Dynamic Router that more closely implements 
the Dynamic Router enterprise integration pattern so that I can use this 
implementation in the cases where the original Dynamic Router would be less 
appropriate.

If we look at the EIP at 
[https://www.enterpriseintegrationpatterns.com/DynamicRouter.html] we see that 
the key concepts are:
 * Control Channel: A Dynamic Router implementation should provide a control 
channel, by which potential recipients can provide their rules that indicate if 
they can process a message.  The current implementation does not seem to have 
any notion of a control channel.  It appears that the current implementation 
interprets the Control Channel as a way for messages to be continuously 
re-circulated back through the Dynamic Router.
 * Recipient Registration: A Dynamic Router implementation should accept 
special registration messages via the Control Channel, at run-time, to allow a 
potential recipient to announce its presence and to provide the conditions 
under which it can handle a message.  While nothing precludes the user of the 
Dynamic Router from implementing this, themselves, there is nothing in the 
current implementation to provide this.
 * Dynamic Rule Base: The Dynamic Router stores the registration information 
for each participant in a rule base that is not fixed, or static.  This is the 
same as the previous point: any rule base is created as a decision tree at 
compile time, or the user must create their own Dynamic Rule Base mechanism.
 * Real-time Rules Evaluation and Routing: When a message arrives, the Dynamic 
Router evaluates all rules that are currently in the Dynamic Rule Base, and 
then routes the message to the recipient whose rules are fulfilled.  Because of 
the two previous points, this is left up to the user to implement.
 * No Dynamic Router Dependency on Recipients: Recipients do not need to care 
about the Dynamic Router, and they do not need to care about evaluating rules.  
If they are able to process the message, the message will be sent to the 
recipient.

I propose to create a "Dynamic Router 2" with the key features that it is 
missing, and to allow control over more of its operation:
 * Add a Control Channel on which recipients will provide their registration 
information, or on which they will unregister.
 * Add a Dynamic Rule Base where the recipients' registration information will 
be maintained.
 * Modify the re-circulation behavior so that a flag for re-circulation can be 
used to turn it on or off.
 * Allow selection between two delivery methods of "first" or "all" to indicate 
if only the first recipient (where a message passes all of its rules) should 
receive the message, or if all suitable recipients should receive it.
 * When multiple recipients are suitable for accepting a message, and the 
Dynamic Router is set to deliver to all suitable recipients, the messages will 
be delivered in the same manner as a Recipient List.
 * The registration message will include a recipient ID, an ordered set of 
expressions that evaluate to true or false, and the recipient's Endpoint, where 
messages that pass its rules evaluation will be sent.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to