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/10/16 14:40:31 UTC

concurrentConsumers create duplicated messages and fail

Hello,

I have a Springboot war with Camel routes deployed on a JBoss EAP 7.1
server. The routes are generated dynamically and some of them have
*concurrentConsumers
> 1* because a route can have several times the same processor;

example (here a schematically representation of a route):
cxf -> jmsx -> jms1 -> p1 -> jms2 -> p2 -> jms1 -> p1 -> jms3 -> p3...

where jms1 will have* concurrentConsumers=2 *cause it use two times p1.
This is working wonderfully.

But, for architectural purpose, I had to split the application in 2. Each
half of the application is on a different JBoss server, schematized here:

*JBoss1     |  JBoss2*
*cxf     -> |   jmsx -> jms1 -> p1 -> jms2 -> p2 -> jms1 -> p1 -> jms3 ->
p3... *

 "jmsx" is a remote queue which is the link between the two servers, and is
used to "inject" messages into the Camel business. The messages are
correctly consumed by Camel, but when they arrived on a part where *
concurrentConsumer=n*, the messages are duplicated n times and make the
workflow fails.

The messages are created on JBoss1 with JMS:

            Session s = connectionFactory.createConnection("test3",
"test3").createSession();
            ObjectMessage m = s.createObjectMessage();
            m.setObject(object);
            m.setStringProperty("Accept", "application/json");
            m.setStringProperty("Content_Type", "application/json");
            m.setStringProperty("type", "chip");
            m.setStringProperty("hasCertificate", "true");
            m.setStringProperty("priority", "NORMAL");
            m.setStringProperty("context", "xxx");

            try (JMSContext context =
connectionFactory.createContext(userName, password)) {
                    context.createProducer().send(destination, m);
.......


Is the problem comes about the fact there is less header properties
generated when I create manually the headers?? or something else???
Here is the difference between the header properties of the first version
of the project and the second one <https://pastebin.com/qvahstrq>


-- 
Damien NICOLAS

Re: concurrentConsumers create duplicated messages and fail

Posted by Damien Nicolas <dm...@gmail.com>.
Ok.. I forgot to add the InOut pattern on my camel consuming queue.

Le ven. 19 oct. 2018 à 09:18, Damien Nicolas <dm...@gmail.com> a
écrit :

> up
>
> Le mar. 16 oct. 2018 à 16:40, Damien Nicolas <dm...@gmail.com> a
> écrit :
>
>> Hello,
>>
>> I have a Springboot war with Camel routes deployed on a JBoss EAP 7.1
>> server. The routes are generated dynamically and some of them have *concurrentConsumers
>> > 1* because a route can have several times the same processor;
>>
>> example (here a schematically representation of a route):
>> cxf -> jmsx -> jms1 -> p1 -> jms2 -> p2 -> jms1 -> p1 -> jms3 -> p3...
>>
>> where jms1 will have* concurrentConsumers=2 *cause it use two times p1.
>> This is working wonderfully.
>>
>> But, for architectural purpose, I had to split the application in 2. Each
>> half of the application is on a different JBoss server, schematized here:
>>
>> *JBoss1     |  JBoss2*
>> *cxf     -> |   jmsx -> jms1 -> p1 -> jms2 -> p2 -> jms1 -> p1 -> jms3 ->
>> p3... *
>>
>>  "jmsx" is a remote queue which is the link between the two servers, and
>> is used to "inject" messages into the Camel business. The messages are
>> correctly consumed by Camel, but when they arrived on a part where *
>> concurrentConsumer=n*, the messages are duplicated n times and make the
>> workflow fails.
>>
>> The messages are created on JBoss1 with JMS:
>>
>>             Session s = connectionFactory.createConnection("test3", "test3").createSession();
>>             ObjectMessage m = s.createObjectMessage();
>>             m.setObject(object);
>>             m.setStringProperty("Accept", "application/json");
>>             m.setStringProperty("Content_Type", "application/json");
>>             m.setStringProperty("type", "chip");
>>             m.setStringProperty("hasCertificate", "true");
>>             m.setStringProperty("priority", "NORMAL");
>>             m.setStringProperty("context", "xxx");
>>
>>             try (JMSContext context = connectionFactory.createContext(userName, password)) {
>>                     context.createProducer().send(destination, m);
>> .......
>>
>>
>> Is the problem comes about the fact there is less header properties
>> generated when I create manually the headers?? or something else???
>> Here is the difference between the header properties of the first version
>> of the project and the second one <https://pastebin.com/qvahstrq>
>>
>>
>> --
>> Damien NICOLAS
>>
>
>
> --
> Damien NICOLAS
>


-- 
Damien NICOLAS

Re: concurrentConsumers create duplicated messages and fail

Posted by Damien Nicolas <dm...@gmail.com>.
up

Le mar. 16 oct. 2018 à 16:40, Damien Nicolas <dm...@gmail.com> a
écrit :

> Hello,
>
> I have a Springboot war with Camel routes deployed on a JBoss EAP 7.1
> server. The routes are generated dynamically and some of them have *concurrentConsumers
> > 1* because a route can have several times the same processor;
>
> example (here a schematically representation of a route):
> cxf -> jmsx -> jms1 -> p1 -> jms2 -> p2 -> jms1 -> p1 -> jms3 -> p3...
>
> where jms1 will have* concurrentConsumers=2 *cause it use two times p1.
> This is working wonderfully.
>
> But, for architectural purpose, I had to split the application in 2. Each
> half of the application is on a different JBoss server, schematized here:
>
> *JBoss1     |  JBoss2*
> *cxf     -> |   jmsx -> jms1 -> p1 -> jms2 -> p2 -> jms1 -> p1 -> jms3 ->
> p3... *
>
>  "jmsx" is a remote queue which is the link between the two servers, and
> is used to "inject" messages into the Camel business. The messages are
> correctly consumed by Camel, but when they arrived on a part where *
> concurrentConsumer=n*, the messages are duplicated n times and make the
> workflow fails.
>
> The messages are created on JBoss1 with JMS:
>
>             Session s = connectionFactory.createConnection("test3", "test3").createSession();
>             ObjectMessage m = s.createObjectMessage();
>             m.setObject(object);
>             m.setStringProperty("Accept", "application/json");
>             m.setStringProperty("Content_Type", "application/json");
>             m.setStringProperty("type", "chip");
>             m.setStringProperty("hasCertificate", "true");
>             m.setStringProperty("priority", "NORMAL");
>             m.setStringProperty("context", "xxx");
>
>             try (JMSContext context = connectionFactory.createContext(userName, password)) {
>                     context.createProducer().send(destination, m);
> .......
>
>
> Is the problem comes about the fact there is less header properties
> generated when I create manually the headers?? or something else???
> Here is the difference between the header properties of the first version
> of the project and the second one <https://pastebin.com/qvahstrq>
>
>
> --
> Damien NICOLAS
>


-- 
Damien NICOLAS