Hi David,

it's all configured in your "redeliveryPolicy", where you instructed the
broker to try resending the message indefinitely.

See http://activemq.apache.org/message-redelivery-and-dlq-handling.html for
more information how redelivery works and how you can use "Dead letter
queues"

Cheers
--
Dejan Bosanac - http://twitter.com/dejanb

Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net


On Sat, Nov 7, 2009 at 7:35 PM, David Erickson <deric...@stanford.edu>wrote:

>
> Hi All,
> I am using AMQ inside a Spring IoC container.  It is a very simple setup
> with the following config:
>
>  <!--  ActiveMQ Broker -->
>  <amq:broker useJmx="false" persistent="false">
>    <amq:transportConnectors>
>      <amq:transportConnector uri="tcp://localhost:0" />
>    </amq:transportConnectors>
>
>  </amq:broker>
>
>   <!--  ActiveMQ destinations to use  -->
>  <amq:queue id="mailDestination"  physicalName="mailsender"/>
>
>  <!-- JMS ConnectionFactory to use, configuring the embedded broker using
> XML -->
>  <amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost">
>    <amq:redeliveryPolicy>
>      <amq:redeliveryPolicy backOffMultiplier="2"
> useExponentialBackOff="true" initialRedeliveryDelay="1000"
> maximumRedeliveries="-1"/>
>    </amq:redeliveryPolicy>
>  </amq:connectionFactory>
>
>  <bean id="myJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
>    <property name="connectionFactory">
>      <!-- lets wrap in a pool to avoid creating a connection per send -->
>      <bean class="org.apache.activemq.pool.PooledConnectionFactory">
>        <property name="connectionFactory">
>          <ref local="jmsFactory"/>
>        </property>
>      </bean>
>    </property>
>    <property name="pubSubDomain">
>      <value>false</value>
>    </property>
>  </bean>
>
>  <bean id="mailContainer"
> class="org.springframework.jms.listener.DefaultMessageListenerContainer">
>      <property name="connectionFactory" ref="jmsFactory"/>
>      <property name="destination" ref="mailDestination"/>
>      <property name="messageListener" ref="mailConsumer"/>
>      <property name="sessionTransacted" value="true"/>
>  </bean>
>
> Along with one corresponding producer and consumer.
>
> My question is this, I noticed that my consumer was having problems sending
> one of the emails in the queue, it was throwing an exception, being placed
> back in the queue, then the entire queue was waiting the backoff time for
> this message to attempt to be delivered again, over and over again,
> producing a head of line blocking problem (no messages can be delivered
> until the one with the error is delivered).
>
> Is there a solution for this? Can the message that failed be pushed to a
> re-delivery queue, or a troubled queue rather than the main queue? Or can
> the consumer walk through the queue looking for a message that is ready to
> be delivered rather than blocking on the front message that isn't set to be
> delivered for some long amount of time because of a previous failure and
> backoff time?
>
> Thanks!
> --
> View this message in context:
> http://old.nabble.com/Message-Head-of-line-blocking-tp26247283p26247283.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>

Reply via email to