Correction: 1) Why would *CACHE_CONSUMER* on the ActiveMQComponent cause endless external redeliveries of a (filtered out) topic message, when with other cache settings (like CACHE_SESSION) this does not occur?
On 5/30/14 10:39 AM, "Jeff Bischoff" <jbisch...@wdtablesystems.com> wrote: >Maybe I need to narrow my questions: > >1) Why would CACHE_SESSION on the ActiveMQComponent cause endless external >redeliveries of a (filtered out) topic message, when with other cache >settings this does not occur? > >2) Why would <rollback/> prevent the external redeliveries, but <stop/> >does not prevent them? > > >Did I provide enough info below to answer these questions? Topics just >aren't working in Camel the way that I would expect! > >Thanks, > >Jeff Bischoff >WDTS > >On 5/29/14 4:25 PM, "Jeff Bischoff" <jbisch...@wdtablesystems.com> wrote: > >>Hi all, >> >>Please forgive me if this is a basic question. >> >>Working with Camel and JMS Topics has seemed very finicky for me so far. >>If I make slight configuration changes, I see the same message repeated >>endlessly. Using jconsole, I now know these messages are "external >>redeliveries", i.e. the same message is being sent from JMS to Camel >>repeatedly without ever getting through. It happens in the case of >>messages that I am intentionally not processing due to some criteria. >>What I don't understand is why these external redeliveries keep >>occurring, when I simply want this message to be dropped. >> >>For example, if I use CACHE_SESSION or lower cache level, the following >>route works just fine for me: >> >> >> <route id="topics-out"> >> <from uri="topic-jms:topic:projectx.>"/> >> <log message="Picked up message with id: ${id}, >>destinationType: ${header.DestinationEntityType}" loggingLevel="INFO"/> >> <choice> >> <when> >> <simple>${header.DestinationEntityType} not in >>'FOO,BAR'</simple> >> <log message="Detected new ${header.Name} topic >>message on ${header.JMSDestination} with id: ${id}, destinationType: >>${header.DestinationEntityType}" loggingLevel="INFO"/> >> <recipientList ignoreInvalidEndpoints="false"> >> <simple>lc-jms:${header.JMSDestination}</simple> >> </recipientList> >> </when> >> </choice> >> </route> >> >> >>However, if I switch to CACHE_CONSUMER and I have even one message >>addressed to 'FOO' or 'BAR', I will see the endless external >>redeliveries. Note that I am using a SingleConnectionFactory specifically >>for this route. >> >> <route id="topics-out"> >> <from uri="topic-jms:topic:projectx.>"/> >> <log message="Picked up message with id: ${id}, >>destinationType: ${header.DestinationEntityType}" loggingLevel="INFO"/> >> <choice> >> <when> >> <simple>${header.DestinationEntityType} not in >>'FOO,BAR'</simple> >> <log message="Detected new ${header.Name} topic >>message on ${header.JMSDestination} with id: ${id}, destinationType: >>${header.DestinationEntityType}" loggingLevel="INFO"/> >> <recipientList ignoreInvalidEndpoints="false"> >> <simple>lc-jms:${header.JMSDestination}</simple> >> </recipientList> >> </when> >> </choice> >> </route> >> >>Now, if I add an Otherwise clause with a Rollback, everything works fine >>again (albeit with a handful of log messages due to the rollbacks): >> >> <route id="topics-out"> >> <from uri="topic-jms:topic:projectx.>"/> >> <log message="Picked up message with id: ${id}, >>destinationType: ${header.DestinationEntityType}" loggingLevel="INFO"/> >> <choice> >> <when> >> <simple>${header.DestinationEntityType} not in >>'FOO,BAR'</simple> >> <log message="Detected new ${header.Name} topic >>message on ${header.JMSDestination} with id: ${id}, destinationType: >>${header.DestinationEntityType}" loggingLevel="INFO"/> >> <recipientList ignoreInvalidEndpoints="false"> >> <simple>lc-jms:${header.JMSDestination}</simple> >> </recipientList> >> </when> >> <otherwise> >> <rollback markRollbackOnly="true" /> >> </otherwise> >> </choice> >> </route> >> >>But if I change that Rollback to a Stop instead, I get the endless >>external redeliveries again: >> >> <route id="topics-out"> >> <from uri="topic-jms:topic:projectx.>"/> >> <log message="Picked up message with id: ${id}, >>destinationType: ${header.DestinationEntityType}" loggingLevel="INFO"/> >> <choice> >> <when> >> <simple>${header.DestinationEntityType} not in >>'FOO,BAR'</simple> >> <log message="Detected new ${header.Name} topic >>message on ${header.JMSDestination} with id: ${id}, destinationType: >>${header.DestinationEntityType}" loggingLevel="INFO"/> >> <recipientList ignoreInvalidEndpoints="false"> >> <simple>lc-jms:${header.JMSDestination}</simple> >> </recipientList> >> </when> >> <otherwise> >> <stop/> >> </otherwise> >> </choice> >> </route> >> >>Why does rolling back prevent the unwanted message from being >>redelivered, while using "stop" causes the redelivery to occur? >>Intuitively, I would have thought it would work the opposite way. Rolling >>back should put the item back on the "from" endpoint, allowing it to be >>processed again. "Stop" should just drop the message, preventing further >>redelivery. What I'm actually seeing is the opposite of this. Am I >>misunderstanding? >> >>I also get the same exact symptoms if I leave the cache level at >>CACHE_SESSION, but I make the subscription durable. In that case the >>rollbacks prevent the problem, but otherwise I get the eternal external >>redeliveries. >> >>Using a Filter element also produces the same results as using the Choice >>element above: >> >> <route id="topics-out"> >> <from >>uri="topic-jms:topic:projectx.>?durableSubscriptionName=testdurasub"/> >> <log message="Picked up message with id: ${id}, >>destinationType: ${header.DestinationEntityType}" loggingLevel="INFO"/> >> <filter> >> <simple>${header.DestinationEntityType} not in >>'FOO,BAR'</simple> >> <recipientList ignoreInvalidEndpoints="false"> >> <simple>lc-jms:${header.JMSDestination}</simple> >> </recipientList> >> </filter> >> </route> >> >>When I look at the topic in JMS, I see the topic "projectx.>" appearing >>and disappearing in the list rapidly. I assume that's caused by the Camel >>polling frequency. It seems a little disturbing to me; is that normal? >> >>Thanks so much for taking the time to help! >> >>Jeff Bischoff >>WDTS >