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 12:36:43 GMT
<destinationPolicy> is for associating per-destination policies with
destinations.

These pages should give you some background
http://incubator.apache.org/activemq/how-do-i-create-new-destinations.html
http://incubator.apache.org/activemq/per-destination-policies.html

On 9/26/06, nusa <setianusa07@yahoo.co.uk> wrote:
>
> OF COURSE .... oh dear oh dear oh dear ... thanks James. Just put  commit(),
> and that's it. Done.
>
> One last thing.
> I define in my activemq.xml the queue destination as follows :
>         <!-- In ActiveMQ 4, you can setup destination policies -->
>         <destinationPolicy>
>             <policyMap>
>                  <policyEntries>
>                     <policyEntry queue="MYQUEUE.QUEUE">
>                         <dispatchPolicy>
>                             <strictOrderDispatchPolicy />
>                         </dispatchPolicy>
>                     </policyEntry>
>                 </policyEntries>
>             </policyMap>
>         </destinationPolicy>
>
> And it also defined in within applicationContext.xml :
>
>     <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"
> autowire="constructor">
>         <constructor-arg>
>             <value>org.apache.activemq.spring.Test.spring.queue</value>
>         </constructor-arg>
>     </bean>
>
>     <!-- a sample POJO consumer -->
>     <bean id="consumer" class="ae.marcurafze.scanning.jms.ConsumerBean"
> init-method="start" >
>         <property name="template">
>             <ref local="myJmsTemplate"/>
>         </property>
>         <property name="destination">
>             <ref local="destination"/>
>         </property>
>     </bean>
>
> Looking at the log, it's only org.apache.activemq.spring.Test.spring.queue
> that is being used :
> ...
> 16:09:52,359 DEBUG [broker.region.AbstractRegion] Adding destination:
> topic://ActiveMQ.Advisory.Connection
> 16:09:52,375 DEBUG [broker.region.AbstractRegion] Adding destination:
> topic://ActiveMQ.Advisory.Topic
> 16:09:52,530 DEBUG [broker.region.AbstractRegion] Adding destination:
> topic://ActiveMQ.Advisory.Consumer.Queue.org.apache.activemq.spring.Test.spring.queue
> 16:09:52,645 DEBUG [factory.support.DefaultListableBeanFactory] Invoking
> BeanPostProcessors after initialization of bean 'consumer'
> ...
>
> What's the purpose of defining queue within  <destinationPolicy> ?
> Should the  <policyEntry queue="MYQUEUE.QUEUE"> points to
> org.apache.activemq.spring.Test.spring.queue, i.e :
> <policyEntry queue="org.apache.activemq.spring.Test.spring.queue"> ?
>
> Thanks James.
>
>
> James.Strachan wrote:
> >
> > 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/
> >
> >
>
> --
> View this message in context: http://www.nabble.com/Problem-with-failover-and-consumer-tf2337476.html#a6505811
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>


-- 

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

Mime
View raw message