2011-09-03 32 views
5

我想在核心HornetQ的客户端持久化队列。问题是,当我停止服务器队列和数据将被销毁。如何使队列持久? 我的代码是:如何使HornetQ在队列中坚持2.2.5核心客户?

import java.util.Date; 
import org.hornetq.api.core.TransportConfiguration; 
import org.hornetq.api.core.client.ClientConsumer; 
import org.hornetq.api.core.client.ClientMessage; 
import org.hornetq.api.core.client.ClientProducer; 
import org.hornetq.api.core.client.ClientSession; 
import org.hornetq.api.core.client.ClientSessionFactory; 
import org.hornetq.api.core.client.HornetQClient; 
import org.hornetq.api.core.client.ServerLocator; 
import org.hornetq.core.config.Configuration; 
import org.hornetq.core.config.impl.ConfigurationImpl; 
import org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory; 
import org.hornetq.core.remoting.impl.invm.InVMConnectorFactory; 
import org.hornetq.core.server.HornetQServer; 
import org.hornetq.core.server.HornetQServers; 

public class EmbeddedExample 
{ 

    public static void main(final String[] args) 
    { 
     try 
     { 

     // Step 1. Create the Configuration, and set the properties accordingly 
     Configuration configuration = new ConfigurationImpl(); 
     configuration.setPersistenceEnabled(false); 
     configuration.setSecurityEnabled(false); 

     configuration.getAcceptorConfigurations().add(new TransportConfiguration(InVMAcceptorFactory.class.getName())); 

     // Step 2. Create and start the server 
     HornetQServer server = HornetQServers.newHornetQServer(configuration); 
     server.start(); 

     // Step 3. As we are not using a JNDI environment we instantiate the objects directly 
     ServerLocator serverLocator = HornetQClient.createServerLocatorWithoutHA(new TransportConfiguration(InVMConnectorFactory.class.getName())); 
     ClientSessionFactory sf = serverLocator.createSessionFactory();   

     // Step 4. Create a core queue   
     ClientSession coreSession = sf.createSession(false, false, false);  

     final String queueName = "queue.exampleQueue"; 

     coreSession.createQueue(queueName, queueName, true); 


     coreSession.close(); 

     ClientSession session = null; 

     try 
     { 

      // Step 5. Create the session, and producer 
      session = sf.createSession(); 

      ClientProducer producer = session.createProducer(queueName); 

      // Step 6. Create and send a message 
      ClientMessage message = session.createMessage(true); 

      final String propName = "myprop"; 

      message.putStringProperty(propName, "Hello sent at " + new Date()); 

      System.out.println("Producer:"); 
      System.out.println("StartDate: "+new Date()); 
      for (int i = 0; i < 100000; i++) 
      { 
        message = session.createMessage(true); // move it 
        message.putStringProperty(propName, "Message: " + i); 
        producer.send(message);  
      } 
      System.out.println("EndDate: "+new Date()); 
      // Step 7. Create the message consumer and start the connection 
      ClientConsumer messageConsumer = session.createConsumer(queueName); 

      session.start(); 

      // Step 8. Receive the message. 
      System.out.println("Consumer:"); 
      System.out.println("StartDate: "+new Date()); 

      //for (int i = 0; i <= 100000; i++)   
      int i=0; 
      while(true) 
      { 
       i++; 
       if(i == 10000){  
        i=0; 
        session.start(); 
        System.out.println("EndDate: "+new Date());       
       } 
       ClientMessage messageReceived = messageConsumer.receive(5000); 
       if (messageReceived!=null) messageReceived.acknowledge(); 
       //System.out.println(messageReceived.getStringProperty(propName)); 
      } 

     } 
     finally 
     { 
      // Step 9. Be sure to close our resources! 
      if (sf != null) 
      { 
       sf.close(); 
      } 

      // Step 10. Stop the server 
      server.stop(); 
     } 
     } 
     catch (Exception e) 
     { 
     e.printStackTrace(); 
     System.exit(-1); 
     } 
    } 
} 
+0

为什么不在这里粘贴代码? - 并执行configuration.setPersistenceEnabled(假)有事情做与队列不坚持? (只是在黑暗中猜测) – stakx

+0

我试图与configuration.setPersistenceEnabled(真);但它给了我“java.lang.UnsatisfiedLinkError”异常。 –

+1

你能添加到此处的代码编辑您原来的问题?这对未来的参考文献来说会好得多..因为没有什么能保证你制作的paste.bin会永远活着。 –

回答

3

如果禁用持久性,你不会有持久性:

Configuration configuration = new ConfigurationImpl(); 
configuration.setPersistenceEnabled(true); <<<< Make this true 

的UnsatisfiedLinkError可能是因为你选择AIO并没有对LD_LIBRARY_PATH本地库,可以设置Journal或在Linux系统中使本地库可用。

configuration.setJournalType(JournalType.NIO);