private void sendMessages( final int numberOfMessages, final int txBatchSize, final boolean durable, final boolean transacted, final boolean display, final int throttleRate, final int messageSize, final boolean useSendAcks) throws Exception { ClientSession session = null; try { session = factory.createSession(!transacted, !transacted); CountDownLatch theLatch = null; if (useSendAcks) { final CountDownLatch latch = new CountDownLatch(numberOfMessages); class MySendAckHandler implements SendAcknowledgementHandler { public void sendAcknowledged(Message message) { latch.countDown(); } } session.setSendAcknowledgementHandler(new MySendAckHandler()); theLatch = latch; } ClientProducer producer = session.createProducer(perfParams.getAddress()); ClientMessage message = session.createMessage(durable); byte[] payload = PerfBase.randomByteArray(messageSize); message.getBodyBuffer().writeBytes(payload); final int modulo = 2000; TokenBucketLimiter tbl = throttleRate != -1 ? new TokenBucketLimiterImpl(throttleRate, false) : null; boolean committed = false; for (int i = 1; i <= numberOfMessages; i++) { producer.send(message); if (transacted) { if (i % txBatchSize == 0) { session.commit(); committed = true; } else { committed = false; } } if (display && i % modulo == 0) { double duration = (1.0 * System.currentTimeMillis() - start) / 1000; PerfBase.log.info(String.format("sent %6d messages in %2.2fs", i, duration)); } // log.info("sent message " + i); if (tbl != null) { tbl.limit(); } } if (transacted && !committed) { session.commit(); } session.close(); if (useSendAcks) { theLatch.await(); } } finally { if (session != null) { session.close(); } } }