I'm afraid it's not implemented yes, I have raised a improvement jira but it's not solved yet, https://issues.apache.org/jira/browse/AMQ-4311
At 2013-06-28 09:33:28,webber <tokomakoma...@gmail.com> wrote: >Hello, > >I'd like to commit a large number of messages in a single transaction. A >typical number >of message is one million and each message size is 512 bytes. > >So I have tested with commiting 100K messages at once. It worked with >changing the memoryLimit >to 200 MB in activemq.xml. > ><policyEntry queue="queue.trigger" producerFlowControl="true" >memoryLimit="200mb"> > >In above configuration, the problem is uncommitted messages consume RAM. >Suppose when 1M messages are >committed at once, 2GB RAM is consumed by uncommited messages and this is >not acceptable. > >Is it possible to configure the activemq storing uncommited messages to disk >instead of RAM ? >I am using the kahadb as a message store. > >The followings are my test code. > >- Sender.java >-------------------------------------------------------------------------------------------- >import javax.jms.JMSException; >import javax.jms.Message; >import javax.jms.TextMessage; >import javax.jms.Queue; >import javax.jms.Connection; >import javax.jms.MessageProducer; >import javax.jms.Session; > >import org.apache.activemq.ActiveMQConnection; >import org.apache.activemq.ActiveMQConnectionFactory; > >import javax.jms.Connection; > >public class Sender { > Connection connection = null; > private static int STRING_SIZE = 512; > private static int LOOP_COUNT = 1000000; > > public static void main(String[] args) throws Exception { > > try { > > if (args.length < 6) { > System.err.println("Please enter correct parameters"); > System.err.println("parameters are broker-url username >password queue-name key1=value1 key2=value2 ..."); > } > String url = args[0]; > String user = args[1]; > String password = args[2]; > String queueName = args[3]; > > STRING_SIZE = Integer.valueOf(args[4]); > LOOP_COUNT = Integer.valueOf(args[5]); > > ActiveMQConnectionFactory factory = new >ActiveMQConnectionFactory(user,password,url); > > Connection connection = factory.createQueueConnection(); > connection.start(); > > Session session = >connection.createSession(true,Session.AUTO_ACKNOWLEDGE); > Queue queue = session.createQueue(queueName); > MessageProducer producer = session.createProducer(queue); > producer.setDeliveryMode(javax.jms.DeliveryMode.PERSISTENT); > > String text = ""; > for (int j=0;j<STRING_SIZE;j++) { > text += "0"; > } > > for (int i=0;i<LOOP_COUNT;i++) { > System.out.println("count = "+ i); > TextMessage msg = session.createTextMessage(); > msg.setText(text); > producer.send(msg); > } > session.commit(); > producer.close(); > session.close(); > connection.close(); > > } catch (JMSException e) { > e.printStackTrace(); > System.err.println("Something is wrong with JMS access."); > System.exit(1); > } > System.exit(0); > } >} > >-------------------------------------------------------------------------------------------- > >- Sender.sh >-------------------------------------------------------------------------------------------- >java -cp /usr/local/oss/apache-activemq-5.8.0/activemq-all-5.8.0.jar:. >Sender tcp://localhost:61616 system manager queue.trigger 512 100000 >-------------------------------------------------------------------------------------------- > > > > > >-- >View this message in context: >http://activemq.2283324.n4.nabble.com/commiting-a-large-number-of-messages-in-a-single-transaction-tp4668672.html >Sent from the ActiveMQ - User mailing list archive at Nabble.com.