activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Strachan" <james.strac...@gmail.com>
Subject Re: Problem with failover and consumer
Date Tue, 26 Sep 2006 11:38:38 GMT
You are creating a transactional consumer but never commit()ing the
transaction - so all messages will be redelivered on startup.

On 9/26/06, nusa <setianusa07@yahoo.co.uk> wrote:
>
> The consumer java code :
>
> public class ConsumerBean implements MessageListener {
>
>         private Logger log = Logger.getLogger(getClass());
>
>     private JmsTemplate                 template;
>     private Destination                 destination;
>
>     private Connection                  connection;
>     private Session                     session;
>     private MessageConsumer     consumer;
>
>     private String                              myId = "ABC";
>
>     public void start() throws JMSException {
>         String selector = "next = '" + myId + "'";
>
>         try {
>             ConnectionFactory factory = template.getConnectionFactory();
>             connection = factory.createConnection();
>
>             // we might be a reusable connection in spring
>             // so lets only set the client ID once if its not set
>             synchronized (connection) {
>                 if (connection.getClientID() == null) {
>                     connection.setClientID(myId);
>                 }
>             }
>
>             connection.start();
>
>             session = connection.createSession(true,
> Session.AUTO_ACKNOWLEDGE);
>             consumer = session.createConsumer(destination, selector, false);
>             consumer.setMessageListener(this);
>         }
>         catch (JMSException ex) {
>             log.error("*** Error Starting Consumer !!!", ex);
>             throw ex;
>         }
>     }
>
>         /* (non-Javadoc)
>          * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
>          */
>         public void onMessage(Message msg) {
>         log.info("==> Receiving a msg to generate PDF ...");
>         ...
>         }
>
>         /**
>          * @return the template
>          */
>         public JmsTemplate getTemplate() {
>                 return template;
>         }
>
>         /**
>          * @param template the template to set
>          */
>         public void setTemplate(JmsTemplate template) {
>                 this.template = template;
>         }
>
>         /**
>          * @return the destination
>          */
>         public Destination getDestination() {
>                 return destination;
>         }
>
>         /**
>          * @param destination the destination to set
>          */
>         public void setDestination(Destination destination) {
>                 this.destination = destination;
>         }
>
> }
>
> I think the message is consumed because the onMessage method is invoked.
>
>
> James.Strachan wrote:
> >
> > Could you post your consumer java code?
> >
> > If you browse the queues, do you see messages being consumed?
> > http://incubator.apache.org/activemq/jmx.html
> >
> >
> > On 9/26/06, nusa <setianusa07@yahoo.co.uk> wrote:
> >>
> >> James,
> >>
> >> OK, I'm going to ignore this failover.
> >>
> >> Back to my consumer,  I'm using a queue ( I mean that what I expected ).
> >> I modified my activemq.xml into :
> >> ...
> >>         <destinationPolicy>
> >>             <policyMap>
> >>                  <policyEntries>
> >>                     <policyEntry queue="SCANNINGDA.QUEUE>">
> >>                         <dispatchPolicy>
> >>                             <strictOrderDispatchPolicy />
> >>                         </dispatchPolicy>
> >>                     </policyEntry>
> >>                 </policyEntries>
> >>             </policyMap>
> >>         </destinationPolicy>
> >> ...
> >>
> >> undeploy, then deploy the war file.
> >> Yet the onMessage got invoke again WITHOUT any message sent by the
> >> producer.
> >> Any idea James ?
> >>
> >> Thanks.
> >>
> >>
> >>
> >> James.Strachan wrote:
> >> >
> >> > On 9/26/06, nusa <setianusa07@yahoo.co.uk> wrote:
> >> >> Thanks James for a quick reply.
> >> >>
> >> >> failover: is  only used on the client side. How and where to define
it
> >> ?
> >> >
> >> > You only use it when configuring your JMS client - ignore it for using
> >> > networkConnectors (i.e. connecting brokers to each other) as they use
> >> > a failover mechanism by default
> >> >
> >> >
> >> http://incubator.apache.org/activemq/how-can-i-support-auto-reconnection.html
> >> >
> >> >
> >> >> OK, sorry for incomplete info.
> >> >> Everytime I startup my Tomcat, my consumer receveive a message, to
be
> >> >> precised
> >> >> the onMessage method is invoked, WITHOUT the producer send any
> >> message.
> >> >> Would that help ?
> >> >
> >> > I can't explain it I'm afraid. Are you using topics or queues? From
> >> > your configuraiton you seem to be using queues with
> >> > lastImageRecoveryPolicy (which is only intended for topics). If you
> >> > are using last image recovery, then getting a message on startup is
> >> > the desired behaviour :)
> >> >
> >> > --
> >> >
> >> > James
> >> > -------
> >> > http://radio.weblogs.com/0112098/
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >> http://www.nabble.com/Problem-with-failover-and-consumer-tf2337476.html#a6504817
> >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >>
> >>
> >
> >
> > --
> >
> > James
> > -------
> > http://radio.weblogs.com/0112098/
> >
> >
>
> --
> View this message in context: http://www.nabble.com/Problem-with-failover-and-consumer-tf2337476.html#a6504962
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>


-- 

James
-------
http://radio.weblogs.com/0112098/

Mime
View raw message