3 Replies Latest reply on Jun 28, 2012 10:27 AM by jbertram

    HornetQ - producer.send() taking a long time

    goldengate001

      I am trying to migrate an application from JBOSS 4.2.2 to JBOSS 7.2.0.

      Posting a message to a persistence enabled topic is taking a long time. It is as though the JBOSS server is blocking on something.

       

      Here are the key information.

       

      1. producer.send(message) is taking a long time. Eg: 10 seconds to 45 seconds.

      2. Topic is persistence enabled.

      3. There is only one durable consumer at this point. But, this will be 4 when this goes to production.

       

       

      I did try setting the journal-sync-transactional to false to see if it is giving me a performance boost. Not much.

       

      Standalone-full.xml entry is as follows:

       

          <subsystem xmlns="urn:jboss:domain:messaging:1.2">
              <hornetq-server>
                  <persistence-enabled>true</persistence-enabled>
                  <journal-sync-transactional>false</journal-sync-transactional>
                  <journal-file-size>102400</journal-file-size>
                  <journal-min-files>2</journal-min-files>
                  <journal-directory path="../data/messaging"/>

       

                  <connectors>
                      <netty-connector name="netty" socket-binding="messaging"/>
                      <netty-connector name="netty-throughput" socket-binding="messaging-throughput">
                          <param key="batch-delay" value="50"/>
                      </netty-connector>
                      <in-vm-connector name="in-vm" server-id="0"/>
                  </connectors>

       

                  <acceptors>
                      <netty-acceptor name="netty" socket-binding="messaging"/>
                      <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
                          <param key="batch-delay" value="50"/>
                          <param key="direct-deliver" value="false"/>
                      </netty-acceptor>
                      <in-vm-acceptor name="in-vm" server-id="0"/>
                  </acceptors>

       

                  <security-settings>
                      <security-setting match="#">
                          <permission type="send" roles="guest"/>
                          <permission type="consume" roles="guest"/>
                          <permission type="createNonDurableQueue" roles="guest"/>
                          <permission type="deleteNonDurableQueue" roles="guest"/>
                      </security-setting>
                  </security-settings>

       

                  <address-settings>
                      <address-setting match="#">
                          <dead-letter-address>jms.queue.DLQ</dead-letter-address>
                          <expiry-address>jms.queue.ExpiryQueue</expiry-address>
                          <redelivery-delay>0</redelivery-delay>
                          <max-size-bytes>10485760</max-size-bytes>
                          <address-full-policy>BLOCK</address-full-policy>
                          <message-counter-history-day-limit>10</message-counter-history-day-limit>
                      </address-setting>
                  </address-settings>

       

                  <jms-connection-factories>
                      <connection-factory name="InVmConnectionFactory">
                          <connectors>
                              <connector-ref connector-name="in-vm"/>
                          </connectors>
                          <entries>
                              <entry name="java:/ConnectionFactory"/>
                          </entries>
                      </connection-factory>
                      <connection-factory name="RemoteConnectionFactory">
                          <connectors>
                              <connector-ref connector-name="netty"/>
                          </connectors>
                          <entries>
                              <entry name="RemoteConnectionFactory"/>
                              <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
                          </entries>
                      </connection-factory>
                      <pooled-connection-factory name="hornetq-ra">
                          <transaction mode="xa"/>
                          <connectors>
                              <connector-ref connector-name="in-vm"/>
                          </connectors>
                          <entries>
                              <entry name="java:/JmsXA"/>
                          </entries>
                      </pooled-connection-factory>
                  </jms-connection-factories>

       

                  <jms-destinations>
                      <jms-queue name="testQueue">
                          <entry name="queue/test"/>
                          <entry name="java:jboss/exported/jms/queue/test"/>
                      </jms-queue>
                      <jms-topic name="AlchemyJobTopic">
                          <entry name="topic/AlchemyJobTopic"/>
                          <entry name="java:jboss/exported/jms/topic/AlchemyJobTopic"/>
                      </jms-topic>
                  </jms-destinations>
              </hornetq-server>
          </subsystem>

       

      Code that posts a message to the topic is as follows:

       

      try
      {
      Connection connection = connectionFactory.createConnection();
      Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
      MessageProducer producer = session.createProducer(topic);
      connection.start();
      MapMessage message = session.createMapMessage();
      message.setString(eventType, body);
      message.setIntProperty("JMS_JBOSS_REDELIVERY_DELAY", 60000);
      message.setIntProperty("JMS_JBOSS_REDELIVERY_LIMIT", 1440);
      message.setStringProperty("MESSAGE_TYPE", eventType);
      log.debug("Before sent to Queue, " + eventType);
      producer.send(message);
      log.debug("After sent to Queue, " + eventType);

       

      session.close();
      connection.close();
      }
      catch(Exception e)
      {
      log.error("Error while posting to Queue : ", e);
      }

       

      ConnectionFactory and the topic are injected as

       

      @Resource(mappedName = "java:/JmsXA")

      @Resource(mappedName = "java:/topic/AlchemyJobTopic")

       

       

      I have not been able to figure out the rootcause yet. Please let me know if you have any thoughts. Thanks!