You can use JMS message selector to only pickup certain messages from a JMS queue.
On Tue, Sep 7, 2010 at 12:30 PM, RomualdoGobbo <[email protected]> wrote: > > Hi All, > I've the following problem unsolved regarding the filtered messages > depending on some info extractect from another queue. > > The case is the following: > > 1. Primary queue contains the messages received from netty:tcp server > 2.Depending the ID found in the body you have to select from another queue > only the messages affected to the previous ID, leaving the other messages in > the queue. > 3. The returning message will be the message (if found) on the second queue, > otherwise all remains unchanged. > > I've solved only partially the problem using the following camelcontext.xml: > > <route> > <from uri="netty:tcp://localhost:5000?textline=true&sync=true"/> > <to uri="jms:MyQueue"/> > <pollEnrich uri="jms:toTelelinkQ" strategyRef="myBeanId"/> > </route> --> > > <bean id="myBeanId" class="org.apache.camel.example.MyBeanProcessor"/> > > due to the process myBeanId that is unable to leave the messages in the > original queue (see the following code), but all messages must be consumed > to know the body content: > > // MyBeanProcessor.java > > package org.apache.camel.example; > > import java.io.*; > > import org.apache.camel.Exchange; > import org.apache.camel.processor.aggregate.AggregationStrategy; > > public class MyBeanProcessor implements AggregationStrategy { > > public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { > > if (newExchange == null) { > // no messages in queue > return newExchange; > } > String payloadOld = oldExchange.getIn().getBody(String.class); > String payloadNew = newExchange.getIn().getBody(String.class); > > String telelink = payloadOld.substring(5, 14); > > if (payloadNew.contains("#") & payloadNew.contains(telelink)) { > System.out.println("OK " + telelink + "=" + > payloadNew); > oldExchange.getIn().setBody(payloadNew.substring(10)); > } else { > System.out.println("NO OK " + telelink + "<>" + > payloadNew); > oldExchange.getIn().setBody(null); > > } > return oldExchange; > } > } > > Many thanks for your help, > Romualdo > > -- > View this message in context: > http://camel.465427.n5.nabble.com/Messages-queue-filtered-depending-on-info-received-by-another-queue-tp2805911p2805911.html > Sent from the Camel Development mailing list archive at Nabble.com. > -- Claus Ibsen Apache Camel Committer Author of Camel in Action: http://www.manning.com/ibsen/ Open Source Integration: http://fusesource.com Blog: http://davsclaus.blogspot.com/ Twitter: http://twitter.com/davsclaus
