You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Damien Nicolas <dm...@gmail.com> on 2018/09/23 09:59:29 UTC

Using same queue multiple times in a circuit

I have several Camel routes defining a "circuit" like this (where `qx` is
the queue number x, `px` is the processor number x)

    q1 -> p1 -> q2 -> p2 -> q1 -> p1 -> q3 -> p3 -> (...)

as


from("jms:queue:q1).process("p1").dynamicRouter().method(DynamicRouterTest.class,
"nextStep");
    from("jms:queue:q2).process("p2").to("jms:queue:q1");
    from("jms:queue:q3).process("p3").to(...);


As you can notice, I reuse the queue `q1` (for achitectural purpose), the
`dynamicrouter` indicate dynamically the destination when a message comes
from `q1`, but when the message arrives at `p2`, I get a timeout exception
in this style:

    2018-09-22 14:21:21,443 [Camel (camel-1) thread #6 -
JmsConsumer[QueueTest]] WARN
org.apache.camel.component.jms.EndpointMessageListener  - Execution of JMS
message listener failed. Caused by: [org.apache.camel.RuntimeCamelException
- org.apache.camel.ExchangeTimedOutException: The OUT message was not
received within: 20000 millis due reply message with correlationID:
ID:373034344443444200000000000000000000000000000000 not received.

How can I make it works without disabling jms replying?

-- 
Damien NICOLAS

RE: Using same queue multiple times in a circuit

Posted by Damien Nicolas <dm...@gmail.com>.
Thanks for your reply ;

I forgot to mention that this circuit represents a workflow : when a message comes from q1, it has to follow the steps in order to avoid data inconsistency.
Your proposition is good if we can do something like :
from(jms:queue:q1).dynamicRouter().method(DynamicRouterTest.class, "nextStep");
  from(direct:p1).process(p1).to(jms:queue:q1);
  from(direct:p2).process(p2) .to(jms:queue:q1);
  from(direct:p3).process(p3) .to(jms:queue:q1);

which leads to the same problem (that I, actually, dont really understand)..


De : Alex Dettinger
Envoyé le :dimanche 23 septembre 2018 14:56
À : users@camel.apache.org
Objet :Re: Using same queue multiple times in a circuit

Hi Damien,

  from("jms:queue:queue1") reads messages once at a time.
Using from("jms:queue:q1?concurrentConsumers=2") may help but imply
consequences in terms of resources, thread safety, readability...

  In such a situation, I would avoid reusing q1 if possible. For instance,
you may be able to model the whole circuit in the dynamic router and do
something like:
  from(jms:queue:q1).dynamicRouter().method(DynamicRouterTest.class,
"nextStep");
  from(direct:p1).process(p1);
  from(direct:p2).process(p2);
  from(direct:p3).process(p3);

Hope this help,
Alex


On Sun, Sep 23, 2018 at 11:59 AM Damien Nicolas <dm...@gmail.com>
wrote:

> I have several Camel routes defining a "circuit" like this (where `qx` is
> the queue number x, `px` is the processor number x)
>
>     q1 -> p1 -> q2 -> p2 -> q1 -> p1 -> q3 -> p3 -> (...)
>
> as
>
>
>
> from("jms:queue:q1).process("p1").dynamicRouter().method(DynamicRouterTest.class,
> "nextStep");
>     from("jms:queue:q2).process("p2").to("jms:queue:q1");
>     from("jms:queue:q3).process("p3").to(...);
>
>
> As you can notice, I reuse the queue `q1` (for achitectural purpose), the
> `dynamicrouter` indicate dynamically the destination when a message comes
> from `q1`, but when the message arrives at `p2`, I get a timeout exception
> in this style:
>
>     2018-09-22 14:21:21,443 [Camel (camel-1) thread #6 -
> JmsConsumer[QueueTest]] WARN
> org.apache.camel.component.jms.EndpointMessageListener  - Execution of JMS
> message listener failed. Caused by: [org.apache.camel.RuntimeCamelException
> - org.apache.camel.ExchangeTimedOutException: The OUT message was not
> received within: 20000 millis due reply message with correlationID:
> ID:373034344443444200000000000000000000000000000000 not received.
>
> How can I make it works without disabling jms replying?
>
> --
> Damien NICOLAS
>


Re: Using same queue multiple times in a circuit

Posted by Alex Dettinger <al...@gmail.com>.
Hi Damien,

  from("jms:queue:queue1") reads messages once at a time.
Using from("jms:queue:q1?concurrentConsumers=2") may help but imply
consequences in terms of resources, thread safety, readability...

  In such a situation, I would avoid reusing q1 if possible. For instance,
you may be able to model the whole circuit in the dynamic router and do
something like:
  from(jms:queue:q1).dynamicRouter().method(DynamicRouterTest.class,
"nextStep");
  from(direct:p1).process(p1);
  from(direct:p2).process(p2);
  from(direct:p3).process(p3);

Hope this help,
Alex


On Sun, Sep 23, 2018 at 11:59 AM Damien Nicolas <dm...@gmail.com>
wrote:

> I have several Camel routes defining a "circuit" like this (where `qx` is
> the queue number x, `px` is the processor number x)
>
>     q1 -> p1 -> q2 -> p2 -> q1 -> p1 -> q3 -> p3 -> (...)
>
> as
>
>
>
> from("jms:queue:q1).process("p1").dynamicRouter().method(DynamicRouterTest.class,
> "nextStep");
>     from("jms:queue:q2).process("p2").to("jms:queue:q1");
>     from("jms:queue:q3).process("p3").to(...);
>
>
> As you can notice, I reuse the queue `q1` (for achitectural purpose), the
> `dynamicrouter` indicate dynamically the destination when a message comes
> from `q1`, but when the message arrives at `p2`, I get a timeout exception
> in this style:
>
>     2018-09-22 14:21:21,443 [Camel (camel-1) thread #6 -
> JmsConsumer[QueueTest]] WARN
> org.apache.camel.component.jms.EndpointMessageListener  - Execution of JMS
> message listener failed. Caused by: [org.apache.camel.RuntimeCamelException
> - org.apache.camel.ExchangeTimedOutException: The OUT message was not
> received within: 20000 millis due reply message with correlationID:
> ID:373034344443444200000000000000000000000000000000 not received.
>
> How can I make it works without disabling jms replying?
>
> --
> Damien NICOLAS
>