You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Tarun Kumar <ag...@gmail.com> on 2013/12/18 19:59:37 UTC
Polling consumer in camel
Hi,
I am creating a polling consumer using:
from("timer://foo?period=5000").bean(cool, "someBusinessLogic");
public static class MyCoolBean {
private int count;
private ConsumerTemplate consumer;
private ProducerTemplate producer;
public void setConsumer(ConsumerTemplate consumer) {
this.consumer = consumer;
}
public void setProducer(ProducerTemplate producer) {
this.producer = producer;
}
public void someBusinessLogic() {
// loop to empty queue
while (true) {
// receive the message from the queue, wait at most 3 sec
String msg = consumer.receiveBody("activemq:queue.inbox", 3000,
String.class);
if (msg == null) {
// no more messages in queue
break;
}
// do something with body
msg = "Hello " + msg;
// send it to the next queue
producer.sendBodyAndHeader("activemq:queue.foo", msg, "number",
count++);
}
}
}
Here, i would like to receive jms message as Message or TextMessage instead
of string. I have tried:
Exchange exchange = consumer
.receive("catalogJms:queue:queueName");
exchange also doesn't give me message as javax.jms.Message or TextMessage.
Is there any way i can do this?
Re: Polling consumer in camel
Posted by Tarun Kumar <ag...@gmail.com>.
Thanks Richard. This helps.
I am using
Exchange exchange = consumer
.receive(
"catalogJms:queue:queueName?mapJmsMessage=false&acknowledgementModeName=CLIENT_ACKNOWLEDGE"
);
even though i am not sending acknowledgement for received message, each
time it is polling different message. Any idea why that's happening?
Thanks,
Tarun
On Thu, Dec 19, 2013 at 12:40 AM, Richard Kettelerij <
richardkettelerij@gmail.com> wrote:
> Set the mapJmsMessage=false option on the jms component to get the actual
> javax.jms.TextMessage. See http://camel.apache.org/jms.html for details
> (paragraph "Disabling auto-mapping of JMS messages").
>
>
> On Wed, Dec 18, 2013 at 7:59 PM, Tarun Kumar <agrawal.tarun23@gmail.com
> >wrote:
>
> > Hi,
> >
> > I am creating a polling consumer using:
> >
> > from("timer://foo?period=5000").bean(cool, "someBusinessLogic");
> >
> > public static class MyCoolBean {
> >
> > private int count;
> > private ConsumerTemplate consumer;
> > private ProducerTemplate producer;
> >
> > public void setConsumer(ConsumerTemplate consumer) {
> > this.consumer = consumer;
> > }
> >
> > public void setProducer(ProducerTemplate producer) {
> > this.producer = producer;
> > }
> >
> > public void someBusinessLogic() {
> > // loop to empty queue
> > while (true) {
> > // receive the message from the queue, wait at most 3 sec
> > String msg = consumer.receiveBody("activemq:queue.inbox",
> 3000,
> > String.class);
> > if (msg == null) {
> > // no more messages in queue
> > break;
> > }
> >
> > // do something with body
> > msg = "Hello " + msg;
> >
> > // send it to the next queue
> > producer.sendBodyAndHeader("activemq:queue.foo", msg,
> "number",
> > count++);
> > }
> > }
> > }
> >
> > Here, i would like to receive jms message as Message or TextMessage
> instead
> > of string. I have tried:
> >
> > Exchange exchange = consumer
> >
> > .receive("catalogJms:queue:queueName");
> >
> > exchange also doesn't give me message as javax.jms.Message or
> TextMessage.
> >
> >
> > Is there any way i can do this?
> >
>
Re: Polling consumer in camel
Posted by Richard Kettelerij <ri...@gmail.com>.
Set the mapJmsMessage=false option on the jms component to get the actual
javax.jms.TextMessage. See http://camel.apache.org/jms.html for details
(paragraph "Disabling auto-mapping of JMS messages").
On Wed, Dec 18, 2013 at 7:59 PM, Tarun Kumar <ag...@gmail.com>wrote:
> Hi,
>
> I am creating a polling consumer using:
>
> from("timer://foo?period=5000").bean(cool, "someBusinessLogic");
>
> public static class MyCoolBean {
>
> private int count;
> private ConsumerTemplate consumer;
> private ProducerTemplate producer;
>
> public void setConsumer(ConsumerTemplate consumer) {
> this.consumer = consumer;
> }
>
> public void setProducer(ProducerTemplate producer) {
> this.producer = producer;
> }
>
> public void someBusinessLogic() {
> // loop to empty queue
> while (true) {
> // receive the message from the queue, wait at most 3 sec
> String msg = consumer.receiveBody("activemq:queue.inbox", 3000,
> String.class);
> if (msg == null) {
> // no more messages in queue
> break;
> }
>
> // do something with body
> msg = "Hello " + msg;
>
> // send it to the next queue
> producer.sendBodyAndHeader("activemq:queue.foo", msg, "number",
> count++);
> }
> }
> }
>
> Here, i would like to receive jms message as Message or TextMessage instead
> of string. I have tried:
>
> Exchange exchange = consumer
>
> .receive("catalogJms:queue:queueName");
>
> exchange also doesn't give me message as javax.jms.Message or TextMessage.
>
>
> Is there any way i can do this?
>