0 Replies Latest reply on Dec 19, 2012 7:47 AM by kzakhar

    Tx send vs. MessageProducer vs. "Timed out waiting for response when sending packet 49"

    kzakhar

      As far as the JBoss 7/EAP6 does not allow to reuse the MessageProducer across the different transactions for a transactional messaging sending (transactional session), we are obliged to follow the rule: if you would like to send the tx message, create the new producer within the transaction you would like to join.

       

      The reason behind that is out of HornetQ scope, but I would like to understand the cost of HornetQ for the frequently created producers.

       

      What I've got so far:

      1. create producer:
        1. acquire the lock for the managed connection - HornetQRASession
        2. send the blocking packet over channel - ClientSessionImpl
          1. synchronize on sendBlockingLock
          2. encode the packet
          3. acquire the channel lock
        3. instantiate the BindingsImpl and populate it with the all bindings for the address - SimpleAddressManager
          1. the latter confuses a bit, further only BindingQuery#isExists is being used!
        4. synchronize on the list of session's producers - ClientSessionImpl
        5. synchronize on the list of session's producers - HornetQRASession
        6.             ....and few instantiations and filling of the arrays with the bindings names between the different layers.
      2. remove producer:
        1. return credits - ClientSessionImpl
        2. synchronize on the list of session's producers - HornetQRASession

       

      Quite a lot. Under the high loading, occasionally we receive the "Timed out waiting for response when sending packet 49", i.e. for the "session binding query".

       

      Thoughts?

       

      Thanks,

      Konstantin