6 Replies Latest reply on Nov 6, 2012 1:27 AM by manu_1185

    Non-blocking producers not working

    manu_1185

      Hi,

       

      We are using hornetq for our project where we do a JNDI lookup of the connection factory and create producers to send messages to durable queues. It looks like lots of threads are getting blocked in ChannelImpl.sendBlocking method. The documentation says that configuring the connection factory by setting block-on-durable-send to false will make the sends non-blocking (as it doesn't waits for response). I tried this but it seems somehow it is not working. Still getting the same issue.

       

      Any suggestions will be greatly appreciated.

        • 1. Re: Non-blocking producers not working
          jbertram

          What address-full-policy are you using?

          • 2. Re: Non-blocking producers not working
            manu_1185

            The address-full-policy being used was BLOCK. Now I have changed it to PAGE. But still in the stack trace, I can see threads getting blocked in ChannelImpl.sendBlocking. Don't know if I am right here, but hornetq code suggests that the threads should go to ChannelImpl.sendBatched (if it works correctly).

            • 3. Re: Non-blocking producers not working
              clebert.suconic

              Are you using transactions?

               

              session.commit() or session.rollback() will also make a blocked call.

               

              I don't have the stack trace from you.. so that's my best guess.

              • 4. Re: Non-blocking producers not working
                clebert.suconic

                You need to send it non-transactionally if you don't want it blocking. (there's no point on making a transaction if you want it unblocked. if you don't want to block means you can afford losing messages in case of failures... so no point on committs then)

                • 5. Re: Non-blocking producers not working
                  manu_1185

                  We are already using non-transacted sessions. We have also set journal-sync-transactional and journal-sync-non-transactional to false. Given below is the stack trace I am getting:

                   

                    Thread "pool-1-thread-20":

                      at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(org.hornetq.core.protocol.core.Packet)

                      at org.hornetq.core.client.impl.ClientProducerImpl.doSend(org.hornetq.api.core.SimpleString, org.hornetq.api.core.Message)

                      at org.hornetq.core.client.impl.ClientProducerImpl.send(org.hornetq.api.core.SimpleString, org.hornetq.api.core.Message)

                      at org.hornetq.jms.client.HornetQMessageProducer.doSend(javax.jms.Message, long, org.hornetq.jms.client.HornetQDestination)

                      at org.hornetq.jms.client.HornetQMessageProducer.send(javax.jms.Destination, javax.jms.Message, int, int, long)

                      at com.bsb.hike.pubsub.jms.JMSProducer.send(javax.jms.Destination, javax.jms.TextMessage, int, int, long)

                      at com.bsb.hike.pubsub.jms.JMSProducer.send(java.lang.String, com.bsb.hike.common.HikeMessage)

                      at com.bsb.hike.pubsub.ProducerPool$MessageSendTask.run()

                      at java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker)

                      at java.util.concurrent.ThreadPoolExecutor$Worker.run()

                      at java.lang.Thread.run()

                  • 6. Re: Non-blocking producers not working
                    manu_1185

                    I just checked the connection factory instance. block-on-durable-send is still coming to be true (though I have set it to be false in the configuration). I programatically set it to false and now threads are not blocking.