This example shows a possible use of the message expired rule, and a copy of the message is put onto a Dead Letter Queue. Both queues and messages can have an expiry interval set. If this interval is exceeded, the message is flagged as being expired. At this point the messageExpired() rule is called. On return from this rule, the expired message is deleted.
/* This rule puts a copy of any expired messages to a Dead Letter Queue */ public boolean messageExpired( MQeFields entry, MQeMsgObject msg ) throws Exception { /* Get the reference to the Queue Manager */ MQeQueueManager qmgr = MQeQueueManager.getReference( ((MQeQueueProxy)owner).getQueueManagerName()); /* need to set re-send flag so that put of message to new queue isn't rejected */ msg.putBoolean( MQe.Msg_Resend, true ); /* if the message contains an expiry interval field - remove it */ if ( msg.contains( MQe.Msg_ExpireTime ) { msg.delete( MQe.Msg_ExpireTime ); } /* put message onto dead letter queue */ qmgr.putMessage( null, MQe.DeadLetter_Queue_Name, msg, null, 0 ); /* Return true. Note that no use is made of this return value - the message is always deleted but the return value is kept for backward compatibility */ return (true); }