Hello,

I'm trying to add some ancillary information to an Exchange getting picked
up from a dead message queue for retries. I'm
basically trying to add a retry count so after a certain amount of pickups
from the dead queue the message is forwarded to
a final queue and remains there for manual inspection. This is the code that
I have that does this

    @RoutingSlip

    public final String[ ] routeEvent( final Exchange exchange , final Event
event )

    {

        final Exception cause = exchange.getProperty( Exchange.
EXCEPTION_CAUGHT , Exception.class );

        final Date createdDate = exchange.getProperty( Exchange.
CREATED_TIMESTAMP , Date.class );

        Integer retryCount = exchange.getProperty( TOTAL_RETRIES , Integer.
class );

        final String[ ] route;

        if( retryCount == null )

        {

            retryCount = 0;


        }


        if( retryCount > MAX_TOTAL_RETRIES )

        {

            LOG.info( "Max retry count of {} reached for message {}
discarding" , retryCount , exchange.getExchangeId( ) );

            route = reallyDead;

        }

        else

        {

            exchange.setProperty( TOTAL_RETRIES , ++retryCount );

            LOG.info( "Retrying dead message, message created {}, exception
" , createdDate , cause );

            LOG.info( "{} retries left for message id {} " ,
MAX_TOTAL_RETRIES - retryCount , exchange.getIn( )

                    .getMessageId( ) );

            route = super.routeEvent( event );

        }

        return route;

    }


While testing, the retryCount is always 0, which implies that the Exchange
modified is a copy and not the one I modified in the first
pass of a failed message. I guess my question is, am I trying to do
something that there's already some DSL, or am I simply using the Exchange
the wrong way, and I have to pass it on somehow?

Thank you,

Ioannis

Reply via email to