2011-09-03 12 views
5

Voglio fare la coda persistente nel client principale hornetQ. Il problema è quando smetto il server della coda e i dati verranno distrutti. Come mantenere una coda persistente? Il mio codice è:Come rendere persistente una coda nel client core 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

Perché non incollare il codice qui? - E il configuration.setPersistenceEnabled (false) ha qualcosa a che fare con la coda che non viene mantenuta? (Solo un'ipotesi al buio) – stakx

+0

Ho provato con configuration.setPersistenceEnabled (true); ma mi dà l'eccezione "java.lang.UnsatisfiedLinkError". –

+1

Puoi modificare la tua domanda originale aggiungendo il codice qui? Sarebbe molto meglio per i riferimenti futuri .. come nulla garantisce il paste.bin che hai fatto vivrà per sempre. –

risposta

3

Se si disattiva la persistenza, non si avrà la persistenza:

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

L'UnsatisfiedLinkError è probabilmente perché si selezionare AIO e non avevano la libreria nativa sul LD_LIBRARY_PATH , impostare Journal o rendere la libreria nativa disponibile in un sistema Linux.

configuration.setJournalType(JournalType.NIO); 
Problemi correlati