2 Replies Latest reply on Feb 7, 2017 12:59 AM by manu29585

    Send an email after to admin after expiry of max-delivery-attempts


      Hello friends,


      Need your guidance for JMS(HornetQ):


      I want to configure email functionality if dead letter queue not completed job in specified time and max attempts.

      I mean,an email should be sent out by dead queue to inform user that queue moved to expiry queue and take the action ( in my, case expiry queue will store pdf file in local disk, later on, we will place pdf to ftp location manually).


      Hoping quick response.




        • 1. Re: Send an email after to admin after expiry of max-delivery-attempts

          When a message is placed on the relevant DLQ you can have a client which consumes the message, sends the appropriate email, and then places the message into another queue to be dealt with later.  HornetQ has no built-in email functionality to support this kind of use-case natively.

          • 2. Re: Send an email after to admin after expiry of max-delivery-attempts

            If this is in context of J2EE, What has been done is to consume as a MDB from DLQ as shown below:


            You could additionally add email logic to this:




            @MessageDriven(name = "DLQProcessorMDBean",activationConfig = {

                    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),

                    @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/DLQ")})


            public class DLQMDBean implements MessageListener {


            public void onMessage(Message msg) {

            HierarchicalStreamWriter xwriter= null;



                    File dir = new File(DLQ_MESSAGE_FILE_PATH);



                    //creates directory


                    log.noI18nDebug("directory exist or IO error ocurred");




                    //Don't process ahead if write permission into directory is not granted

                    if (!dir.setWritable(true, false)) {

                        log.noI18nWarn("Error: DLQ messages dumps permision setting failed!");

                        return ;




                    if (!(msg instanceof ObjectMessage)) {

                        log.noI18nInfo("Input message is not an JMS ObjectMessage to process , so skip it");



                    try {

                        ObjectMessage objMsg = (ObjectMessage) msg;

                        // obtain context from message object

                        msg = (Context) objMsg.getObject();









                          // create file name using context's attributes and current dateTime




                          XStream xstream = new XStream();

                          BufferedOutputStream fos;

                          fos = new BufferedOutputStream(new FileOutputStream(dlqMessageFileName));

                          HierarchicalStreamDriver xdriver = new com.thoughtworks.xstream.io.xml.DomDriver();

                          xwriter = xdriver.createWriter(fos);

                          // create root-node "message"


                          xwriter.addAttribute("startTime", new Date().toString());

                          xstream.marshal(msg, xwriter);


                          log.noI18nDebug("Message from DLQ is saved into "+dlqMessageFileName);

                    }catch (FileNotFoundException ex) {

                      //log here

                    }catch (Exception e) {

                        //log here

                    } finally{






                        log.noI18nDebug("Finished DLQ onMessage()");