You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Jonathan Anstey (JIRA)" <ji...@apache.org> on 2008/10/30 17:02:05 UTC

[jira] Created: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Messages in Resequencer between 2 JMS queues get stuck
------------------------------------------------------

                 Key: CAMEL-1037
                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
             Project: Apache Camel
          Issue Type: Bug
          Components: camel-core
    Affects Versions: 1.5.0
            Reporter: Jonathan Anstey


Martin describes the issue as follows in CAMEL-1034:

"The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "Martin Krasser (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Krasser updated CAMEL-1037:
----------------------------------

    Attachment: camel-2.0.patch

... here it is. The file camel-2.0.patch fixes the aforementioned issues on the trunk.

> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>            Assignee: William Tam
>         Attachments: camel-1.x.patch, camel-2.0.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=47969#action_47969 ] 

Claus Ibsen commented on CAMEL-1037:
------------------------------------

Maybe you can use expectedInAnyOrder mock assertions for the concurrent consumer test?

> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>            Assignee: William Tam
>             Fix For: 1.5.1, 2.0.0
>
>         Attachments: camel-1.x.patch, camel-2.0.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Work started: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "William Tam (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Work on CAMEL-1037 started by William Tam.

> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>            Assignee: William Tam
>         Attachments: camel-1.x.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "Martin Krasser (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Krasser updated CAMEL-1037:
----------------------------------

    Attachment: camel-1.x.patch

Attached is a patch that fixes this issue and also issue CAMEL-393. What has been done in this patch:

* I removed the polling consumer from the BatchProcessor because it 
** competes with other threads e.g. those that consume messages from a JMS queue (already described in CAMEL-642 and CAMEL-1034). 
** it consumes messages directly from the starting-endpoint of the current route (obtained via {{routeContext.getEndpoint()}}). This caused CAMEL-393.
* BatchProcessor now queues up exchanges which are then sent by a separate thread. The separate thread is needed to deal with timeouts. The old BatchProcessor implementation also stored exchanges in memory so there is at least no decrease in QoS with this patch. Reliable batch processing (and stream-resequencing) will be addressed with issue CAMEL-949 (for which I don't have a patch yet).   
* CAMEL-393 was reported for the aggregator but the same problems arise for the batch resequencer and stream resequencer. All three can now be used in route definitions as requested in CAMEL-393. (This required to remove the polling consumer from the StreamResequencer too).

CAMEL-1037 came up because because in Camel 1.4 the {{org.apache.camel.Processor}} interface was introduced for the BatchProcessor with an empty {{process(Exchange)}} implementation. The JMS consumer threads competed with the polling thread of the batch processor where all exchanges delivered via the JMS consumer threads have been lost (i.e. {{process(Exchange)}} ignored those exchanges). 

So far I created this patch for the Camel-1.x branch because I'm not sure if you (comitters, others) already thought about a different solution to this problem for Camel 2.0. If you don't have any objections to this patch please tell me and I'll create one for the current trunk.


> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>         Attachments: camel-1.x.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "William Tam (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=47958#action_47958 ] 

William Tam commented on CAMEL-1037:
------------------------------------

Martin, many thanks to your patch.  I've checked it in with a modification to the test mentioned above.  Feel free to reopen with a new patch if you have a better way to do it.

> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>            Assignee: William Tam
>             Fix For: 1.5.1, 2.0.0
>
>         Attachments: camel-1.x.patch, camel-2.0.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "Jonathan Anstey (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=47933#action_47933 ] 

Jonathan Anstey commented on CAMEL-1037:
----------------------------------------

Very thorough patch + description Martin. Great work! 

To my knowledge we haven't come up with another solution in Camel 2.0. Would be good to get this fix into trunk as well.



> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>         Attachments: camel-1.x.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "Martin Krasser (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=47961#action_47961 ] 

Martin Krasser commented on CAMEL-1037:
---------------------------------------

William,

thanks for applying the patch. You are completly right that during the sending from activemq.queue:out to mock:result the exchange order is messed up because I've configured 10 concurrent consumers. This is needed to test concurrent access to the resequencers but doesn't make any sense for sending re-ordered messages to the mock endpoint - sorry for messing that up. An alternative is to register a second JMS component configured with only one consumer, then the messages are kept in order (but this doesn't bring any better test because all related issues came from interaction with the first JMS queue ({{activemq.queue:in}} in our example. So we should leave it as you suggested).

Regarding {{getCollection}}: The way how it is used in {{Aggregator}} doesn't make sense to me either (even before the patch). In my opinion, it does make sense to keep the {{getCollection}} method but it shouldn't be used to determine the current batch size. For that a separate {{getBatchSize}} method should be provided that operates on the private queue (buffer) of the batch processor. 

> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>            Assignee: William Tam
>             Fix For: 1.5.1, 2.0.0
>
>         Attachments: camel-1.x.patch, camel-2.0.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "William Tam (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

William Tam resolved CAMEL-1037.
--------------------------------

       Resolution: Fixed
    Fix Version/s: 2.0.0
                   1.5.1

Committed revision 724629 to camel-1.x.
Committed revision 724619 to trunk



> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>            Assignee: William Tam
>             Fix For: 1.5.1, 2.0.0
>
>         Attachments: camel-1.x.patch, camel-2.0.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "William Tam (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=47945#action_47945 ] 

William Tam commented on CAMEL-1037:
------------------------------------

Nice work, Martin!  I am looking to apply this patch but testBatchResequencer() is failing on me.  Do you have any suggestion?  I'm on 1.x currently. 

java.lang.AssertionError: mock:result body == 9 failed on Exchange[JmsMessage: ActiveMQObjectMessage {commandId = 5, responseRequired = true, messageId = ID:lenw500-55044-1228766892918-2:113:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:lenw500-55044-1228766892918-2:113:1:1, destination = queue://out, transactionId = null, expiration = 0, timestamp = 1228766893813, arrival = 0, brokerInTime = 1228766893813, brokerOutTime = 1228766893813, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@56f2c96c, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 1106, properties = {num=11}, readOnlyProperties = true, readOnlyBody = true, droppable = false}] with left value <11> right value <9>
	at org.apache.camel.builder.BinaryPredicateSupport.assertMatches(BinaryPredicateSupport.java:57)
	at org.apache.camel.builder.BinaryPredicateSupport.assertMatches(BinaryPredicateSupport.java:1)
	at org.apache.camel.component.mock.AssertionClause.applyAssertionOn(AssertionClause.java:114)
	at org.apache.camel.component.mock.MockEndpoint$8.run(MockEndpoint.java:496)
	at org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied(MockEndpoint.java:249)
	at org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied(MockEndpoint.java:214)
	at org.apache.camel.component.jms.issues.JmsResequencerTest.testResequencer(JmsResequencerTest.java:66)
	at org.apache.camel.component.jms.issues.JmsResequencerTest.testBatchResequencer(JmsResequencerTest.java:51)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runManaged(AbstractJUnit38SpringContextTests.java:307)
	at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.access$000(AbstractJUnit38SpringContextTests.java:94)
	at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests$1.run(AbstractJUnit38SpringContextTests.java:193)
	at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runTest(AbstractJUnit38SpringContextTests.java:270)
	at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runTestTimed(AbstractJUnit38SpringContextTests.java:228)
	at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runBare(AbstractJUnit38SpringContextTests.java:191)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)



> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>            Assignee: William Tam
>         Attachments: camel-1.x.patch, camel-2.0.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "Martin Krasser (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=46939#action_46939 ] 

Martin Krasser commented on CAMEL-1037:
---------------------------------------

Not sure if this issue is also related to CAMEL-393. I just mention it here so that I don't forget to investigate.

> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=47931#action_47931 ] 

Claus Ibsen commented on CAMEL-1037:
------------------------------------

At the very first peek it looks like a yet again a really great patch Martin. 

To my knowledge we haven't thought of a different solution for this in Camel 2.0. Hadrian / Jonathan what do you say?

> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>         Attachments: camel-1.x.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Assigned: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "William Tam (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

William Tam reassigned CAMEL-1037:
----------------------------------

    Assignee: William Tam

> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>            Assignee: William Tam
>         Attachments: camel-1.x.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAMEL-1037) Messages in Resequencer between 2 JMS queues get stuck

Posted by "William Tam (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/CAMEL-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=47952#action_47952 ] 

William Tam commented on CAMEL-1037:
------------------------------------

The resequencer seems to be working properly.  I wonder the during the sending from activemq.queue:out to mock:result could mess up the message order?  If I change the routes to forward output of the resequencer directly to mock:result, it still verifies the working of the resequencer and tests pass.

{code}
 from("activemq:queue:in1").resequence().body().batch().size(100).timeout(10000L).to("mock:result");
 from("activemq:queue:in2").resequence().header("num").stream().timeout(2000L).to("mock:result");
{code}

One question on the patch:  The BatchSender uses a private queue to buffer incoming messages.   The queue is drained to the "collection" until the batch of messages should be sent.  My concern is that the protected method getCollection() can fool the caller thinking the batch is empty.  I don't know if getCollection() is really needed, though.  It is only referenced by Aggregator to read the size of the collection.   

> Messages in Resequencer between 2 JMS queues get stuck
> ------------------------------------------------------
>
>                 Key: CAMEL-1037
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1037
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.5.0
>            Reporter: Jonathan Anstey
>            Assignee: William Tam
>         Attachments: camel-1.x.patch, camel-2.0.patch
>
>
> Martin describes the issue as follows in CAMEL-1034:
> "The issue with the regular resequencer (the one that extends the BatchProcessor) remains because the process(Exchange) method is empty. In addition to the BatchProcessor's polling consumer, an additional JmsConsumer is created by the JMS endpoint that competes with the polling consumer. The JmsConsumer then calls the empty process(Exchange) method and the exchange is lost."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.