concurrentConsumers create duplicated messages and fail

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

concurrentConsumers create duplicated messages and fail

Damien Nicolas
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
Reply | Threaded
Open this post in threaded view
|

Re: concurrentConsumers create duplicated messages and fail

Damien Nicolas
up

Le mar. 16 oct. 2018 à 16:40, Damien Nicolas <[hidden email]> 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
Reply | Threaded
Open this post in threaded view
|

Re: concurrentConsumers create duplicated messages and fail

Damien Nicolas
Ok.. I forgot to add the InOut pattern on my camel consuming queue.

Le ven. 19 oct. 2018 à 09:18, Damien Nicolas <[hidden email]> a
écrit :

> up
>
> Le mar. 16 oct. 2018 à 16:40, Damien Nicolas <[hidden email]> 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