[
https://issues.apache.org/jira/browse/CAMEL-17500?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Steve Storck updated CAMEL-17500:
---------------------------------
Description:
{*}User Story{*}:
As a user of the Dynamic Router EIP component, I want to be able to subscribe
with URL parameters so that I am not required to create a control message POJO
to send as the message body.
{*}Description / Explanation{*}:
While a control channel POJO gives full control over the subscription or
unsubscription, it would be more convenient to be able to send these messages
from a routing participant by using URL parameters. Creating the control
channel message for subscription looks like this:
{code:java}
DynamicRouterControlMessage billingSubMsg = new SubscribeMessageBuilder()
.id("billingSubscription")
.channel("billing")
.priority(10)
.endpointUri(myBillingNotificationUri)
.predicate(new SomeBillingPredicate())
.build(); {code}
Then this is sent to the dynamic router control channel by:
{code:java}
template.sendBody("dynamic-router:control", billingSubMsg);{code}
The above could be simplified and combined by using the URI to specify the
message:
{code:java}
template.sendBody("dynamic-router:control/subscribe/billing?subscriptionId=billingSubscription&endpointUri=jms:billing&priority=10&predicate=${bodyAs(String)}
regex '^\\d*[02468]$'");{code}
Alternatives can include:
* Creating a {{Predicate}} as a bean, and referencing that bean as the
{{predicate}}
* Instantiating a {{Predicate}} and sending that predicate as the message body
* Omitting the {{subscriptionId}} parameter, so that a subscription ID is
generated and returned
Similarly, unsubscribing can be achieved by:
{code:java}
template.sendBody("dynamic-router:control/unsubscribe/billing?subscriptionId=billingSubscription);{code}
{*}Acceptance Criteria{*}:
# Subscribing with all URI params:
** given: All necessary dependencies present for setting up a route with the
dynamic router component
** when: Routing participant sends empty message body to the dynamic router
with the subscription URI beginning with
"dynamic-router:control/subscribe/\{channel name}" and all other params
** then: Routing participant is subscribed with all supplied values
# Unsubscribing:
** given: All necessary dependencies present for setting up a route with the
dynamic router component, and routing participant has a valid subscription ID
and channel name
** when: Routing participant sends empty message body to the dynamic router
with the subscription URI beginning with
"dynamic-router:control/unsubscribe/\{channel name}" and the subscription ID
** then: Routing participant is unsubscribed for that channel and that
subscription ID
# Subscribing with URI params and Predicate bean:
** given: All necessary dependencies present for setting up a route with the
dynamic router component, and a Predicate bean has been registered in the
registry
** when: Routing participant sends an empty message to the dynamic router with
the subscription URI beginning with "dynamic-router:control/subscribe/\{channel
name}", the predicate parameter referencing the predicate bean, and all other
params
** then: Routing participant is subscribed with all supplied values
# Subscribing with URI params and Predicate as message body:
** given: All necessary dependencies present for setting up a route with the
dynamic router component and a Predicate has been instantiated
** when: Routing participant sends an empty message to the dynamic router with
the subscription URI beginning with "dynamic-router:control/subscribe/\{channel
name}", and all other params, and the predicate instance is set as the message
body
** then: Routing participant is subscribed with all supplied values
# Subscribing with control message POJO operates without change:
** given: All necessary dependencies present for setting up a route with the
dynamic router component and a control message POJO has been instantiated
** when: Routing participant sends subscribe POJO as message body to the
control channel
** then: Routing participant is subscribed with all supplied values
# Unsubscribing with control message POJO operates without change:
** given: All necessary dependencies present for setting up a route with the
dynamic router component, routing participant has a valid subscription ID and
channel name, and a control message POJO for unsubscribing has been
instantiated
** when: Routing participant sends unsubscribe POJO as message body to the
control channel
** then: Routing participant is unsubscribed for that channel and that
subscription ID
# Provide a mode to allow routing to all matching participants
** given: multiple subscribers with at least some overlapping filter predicates
** when: incoming messages match multiple recipients' filters
** then: all matching recipients receive a copy of the message
was:
{*}User Story{*}:
As a user of the Dynamic Router EIP component, I want to be able to subscribe
with URL parameters so that I am not required to create a control message POJO
to send as the message body.
{*}Description / Explanation{*}:
While a control channel POJO gives full control over the subscription or
unsubscription, it would be more convenient to be able to send these messages
from a routing participant by using URL parameters. Creating the control
channel message for subscription looks like this:
{code:java}
DynamicRouterControlMessage billingSubMsg = new SubscribeMessageBuilder()
.id("billingSubscription")
.channel("billing")
.priority(10)
.endpointUri(myBillingNotificationUri)
.predicate(new SomeBillingPredicate())
.build(); {code}
Then this is sent to the dynamic router control channel by:
{code:java}
template.sendBody("dynamic-router:control", billingSubMsg);{code}
The above could be simplified and combined by using the URI to specify the
message:
{code:java}
template.sendBody("dynamic-router:control/subscribe/billing?subscriptionId=billingSubscription&endpointUri=jms:billing&priority=10&predicate=${bodyAs(String)}
regex '^\\d*[02468]$'");{code}
Alternatives can include:
* Creating a {{Predicate}} as a bean, and referencing that bean as the
{{predicate}}
* Instantiating a {{Predicate}} and sending that predicate as the message body
* Omitting the {{subscriptionId}} parameter, so that a subscription ID is
generated and returned
Similarly, unsubscribing can be achieved by:
{code:java}
template.sendBody("dynamic-router:control/unsubscribe/billing?subscriptionId=billingSubscription);{code}
{*}Acceptance Criteria{*}:
# Subscribing with all URI params:
** given: All necessary dependencies present for setting up a route with the
dynamic router component
** when: Routing participant sends empty message body to the dynamic router
with the subscription URI beginning with
"dynamic-router:control/subscribe/\{channel name}" and all other params
** then: Routing participant is subscribed with all supplied values
# Unsubscribing:
** given: All necessary dependencies present for setting up a route with the
dynamic router component, and routing participant has a valid subscription ID
and channel name
** when: Routing participant sends empty message body to the dynamic router
with the subscription URI beginning with
"dynamic-router:control/unsubscribe/\{channel name}" and the subscription ID
** then: Routing participant is unsubscribed for that channel and that
subscription ID
# Subscribing with URI params and Predicate bean:
** given: All necessary dependencies present for setting up a route with the
dynamic router component, and a Predicate bean has been registered in the
registry
** when: Routing participant sends an empty message to the dynamic router with
the subscription URI beginning with "dynamic-router:control/subscribe/\{channel
name}", the predicate parameter referencing the predicate bean, and all other
params
** then: Routing participant is subscribed with all supplied values
# Subscribing with URI params and Predicate as message body:
** given: All necessary dependencies present for setting up a route with the
dynamic router component and a Predicate has been instantiated
** when: Routing participant sends an empty message to the dynamic router with
the subscription URI beginning with "dynamic-router:control/subscribe/\{channel
name}", and all other params, and the predicate instance is set as the message
body
** then: Routing participant is subscribed with all supplied values
# Subscribing with control message POJO operates without change:
** given: All necessary dependencies present for setting up a route with the
dynamic router component and a control message POJO has been instantiated
** when: Routing participant sends subscribe POJO as message body to the
control channel
** then: Routing participant is subscribed with all supplied values
# Unsubscribing with control message POJO operates without change:
** given: All necessary dependencies present for setting up a route with the
dynamic router component, routing participant has a valid subscription ID and
channel name, and a control message POJO for unsubscribing has been
instantiated
** when: Routing participant sends unsubscribe POJO as message body to the
control channel
** then: Routing participant is unsubscribed for that channel and that
subscription ID
> Make dynamic router eip component subscription easier
> -----------------------------------------------------
>
> Key: CAMEL-17500
> URL: https://issues.apache.org/jira/browse/CAMEL-17500
> Project: Camel
> Issue Type: Improvement
> Components: camel-core, eip
> Reporter: Steve Storck
> Assignee: Steve Storck
> Priority: Minor
>
> {*}User Story{*}:
> As a user of the Dynamic Router EIP component, I want to be able to subscribe
> with URL parameters so that I am not required to create a control message
> POJO to send as the message body.
> {*}Description / Explanation{*}:
> While a control channel POJO gives full control over the subscription or
> unsubscription, it would be more convenient to be able to send these messages
> from a routing participant by using URL parameters. Creating the control
> channel message for subscription looks like this:
> {code:java}
> DynamicRouterControlMessage billingSubMsg = new SubscribeMessageBuilder()
> .id("billingSubscription")
> .channel("billing")
> .priority(10)
> .endpointUri(myBillingNotificationUri)
> .predicate(new SomeBillingPredicate())
> .build(); {code}
> Then this is sent to the dynamic router control channel by:
> {code:java}
> template.sendBody("dynamic-router:control", billingSubMsg);{code}
> The above could be simplified and combined by using the URI to specify the
> message:
> {code:java}
> template.sendBody("dynamic-router:control/subscribe/billing?subscriptionId=billingSubscription&endpointUri=jms:billing&priority=10&predicate=${bodyAs(String)}
> regex '^\\d*[02468]$'");{code}
> Alternatives can include:
> * Creating a {{Predicate}} as a bean, and referencing that bean as the
> {{predicate}}
> * Instantiating a {{Predicate}} and sending that predicate as the message
> body
> * Omitting the {{subscriptionId}} parameter, so that a subscription ID is
> generated and returned
> Similarly, unsubscribing can be achieved by:
>
> {code:java}
> template.sendBody("dynamic-router:control/unsubscribe/billing?subscriptionId=billingSubscription);{code}
>
> {*}Acceptance Criteria{*}:
> # Subscribing with all URI params:
> ** given: All necessary dependencies present for setting up a route with the
> dynamic router component
> ** when: Routing participant sends empty message body to the dynamic router
> with the subscription URI beginning with
> "dynamic-router:control/subscribe/\{channel name}" and all other params
> ** then: Routing participant is subscribed with all supplied values
> # Unsubscribing:
> ** given: All necessary dependencies present for setting up a route with the
> dynamic router component, and routing participant has a valid subscription ID
> and channel name
> ** when: Routing participant sends empty message body to the dynamic router
> with the subscription URI beginning with
> "dynamic-router:control/unsubscribe/\{channel name}" and the subscription ID
> ** then: Routing participant is unsubscribed for that channel and that
> subscription ID
> # Subscribing with URI params and Predicate bean:
> ** given: All necessary dependencies present for setting up a route with the
> dynamic router component, and a Predicate bean has been registered in the
> registry
> ** when: Routing participant sends an empty message to the dynamic router
> with the subscription URI beginning with
> "dynamic-router:control/subscribe/\{channel name}", the predicate parameter
> referencing the predicate bean, and all other params
> ** then: Routing participant is subscribed with all supplied values
> # Subscribing with URI params and Predicate as message body:
> ** given: All necessary dependencies present for setting up a route with the
> dynamic router component and a Predicate has been instantiated
> ** when: Routing participant sends an empty message to the dynamic router
> with the subscription URI beginning with
> "dynamic-router:control/subscribe/\{channel name}", and all other params, and
> the predicate instance is set as the message body
> ** then: Routing participant is subscribed with all supplied values
> # Subscribing with control message POJO operates without change:
> ** given: All necessary dependencies present for setting up a route with the
> dynamic router component and a control message POJO has been instantiated
> ** when: Routing participant sends subscribe POJO as message body to the
> control channel
> ** then: Routing participant is subscribed with all supplied values
> # Unsubscribing with control message POJO operates without change:
> ** given: All necessary dependencies present for setting up a route with the
> dynamic router component, routing participant has a valid subscription ID and
> channel name, and a control message POJO for unsubscribing has been
> instantiated
> ** when: Routing participant sends unsubscribe POJO as message body to the
> control channel
> ** then: Routing participant is unsubscribed for that channel and that
> subscription ID
> # Provide a mode to allow routing to all matching participants
> ** given: multiple subscribers with at least some overlapping filter
> predicates
> ** when: incoming messages match multiple recipients' filters
> ** then: all matching recipients receive a copy of the message
--
This message was sent by Atlassian Jira
(v8.20.1#820001)