2011-10-12 4 views
2

Je tente de démarrer une configuration de cluster intégrée, mais je n'ai pas pu le faire. J'ai utilisé l'exemple de cluster trouvé dans les exemples hornetq. Cela fonctionne, je ne dois pas exécuter les exemples en utilisant un hornetq intégré. Je ne peux obtenir aucune exception mais le système meurt.Configuration du cluster intégré HornetQ

public class HornetQEmbedded { 

    private JMSServerManager jmsServerManager; 

    public HornetQEmbedded() { 
    } 


    public void start() { 
     try { 
      System.out.println("Starting Embedded HornetQ instance..."); 

      // Retrieve configuration from xml file 
      FileConfiguration configuration = new FileConfiguration(); 
      configuration.setConfigurationUrl("hornetq-configuration.xml"); 
      configuration.start(); 

      // Change acceptor configuration 
      Map<String, Object> acceptorParams = new HashMap<String, Object>(); 
      acceptorParams.put(TransportConstants.PORT_PROP_NAME, "5446"); 
      acceptorParams.put(TransportConstants.HOST_PROP_NAME, "0.0.0.0"); 
      configuration.getAcceptorConfigurations().clear(); 
      configuration.getAcceptorConfigurations().add(new TransportConfiguration(NettyAcceptorFactory.class.getName(), acceptorParams)); 


      // Change connector configuration 
      Map<String, Object> connectorParams = new HashMap<String, Object>(); 
      connectorParams.put(TransportConstants.PORT_PROP_NAME, "5446"); 
      connectorParams.put(TransportConstants.HOST_PROP_NAME, "0.0.0.0"); 
      configuration.getConnectorConfigurations().clear(); 
      configuration.getConnectorConfigurations().put("netty", new TransportConfiguration(NettyAcceptorFactory.class.getName(), connectorParams)); 

      // Create HornetQ server 
      HornetQServer server = HornetQServers.newHornetQServer(configuration); 
      server.getSecurityManager().addUser("guest", "guest"); 
      server.getSecurityManager().setDefaultUser("guest"); 
      server.getSecurityManager().addRole("guest", "guest"); 


      // Load queues 
      jmsServerManager = new JMSServerManagerImpl(server, "hornetq-jms.xml"); 
      jmsServerManager.setContext(null);    

      // Start server 
      jmsServerManager.start(); 

      System.out.println("Waiting 5 second for embedded hornetq server to start..."); 
      Thread.sleep(5000);   

     } catch (Exception e) { 
      System.out.println("Error starting Embedded HornetQ server: " + e.toString());   
      throw new RuntimeException(e); 
     } 
    }  
} 

Et ceci est le fichier de configuration HornetQ:

<configuration xmlns="urn:hornetq" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="urn:hornetq /schema/hornetq-configuration.xsd"> 

    <paging-directory>data/paging</paging-directory> 
    <bindings-directory>data/bindings</bindings-directory> 
    <journal-directory>data/journal</journal-directory> 
    <journal-min-files>10</journal-min-files> 
    <large-messages-directory>data/large-messages</large-messages-directory> 
    <connectors> 
     <connector name="netty"> 
     <factory- class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> 
     <param key="host" value="${hornetq.remoting.netty.host:0.0.0.0}"/> 
     <param key="port" value="${hornetq.remoting.netty.port:5444}"/> 
     </connector> 
    </connectors> 

    <acceptors> 
     <acceptor name="netty"> 
     <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class> 
     <param key="host" value="${hornetq.remoting.netty.host:0.0.0.0}"/> 
     <param key="port" value="${hornetq.remoting.netty.port:5446}"/> 
     </acceptor> 
    </acceptors> 

    <!-- Clustering configuration --> 

    <broadcast-groups> 
     <broadcast-group name="my-broadcast-group"> 
     <group-address>127.0.0.1</group-address> <!-- 231.7.7.7 --> 
     <group-port>5442</group-port> <!-- 9876 --> 
     <broadcast-period>100</broadcast-period> 
     <connector-ref>netty-connector</connector-ref> 
     </broadcast-group> 
    </broadcast-groups> 

    <discovery-groups> 
     <discovery-group name="my-discovery-group"> 
     <group-address>127.0.0.1</group-address> <!-- 231.7.7.7 --> 
     <group-port>5442</group-port> <!-- 9876 --> 
     <refresh-timeout>10000</refresh-timeout> 
     </discovery-group> 
    </discovery-groups> 

    <cluster-connections> 
     <cluster-connection name="my-cluster"> 
     <address>jms</address> 
     <connector-ref>netty-connector</connector-ref> 
     <retry-interval>500</retry-interval> 
     <use-duplicate-detection>true</use-duplicate-detection> 
     <forward-when-no-consumers>true</forward-when-no-consumers> 
     <max-hops>1</max-hops> 
     <discovery-group-ref discovery-group-name="my-discovery-group"/> 
     </cluster-connection> 
    </cluster-connections> 

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

    <address-settings> 
     <!--default for catch all--> 
     <address-setting match="#"> 
     <dead-letter-address>jms.queue.DLQ</dead-letter-address> 
     <expiry-address>jms.queue.ExpiryQueue</expiry-address> 
     <redelivery-delay>0</redelivery-delay> 
     <page-size-bytes>10485760</page-size-bytes> 
     <max-size-bytes>209715200</max-size-bytes>  
     <message-counter-history-day-limit>10</message-counter-history-day-limit> 
     <address-full-policy>PAGE</address-full-policy> 
     </address-setting> 
    </address-settings> 

</configuration> 
+0

Je voudrais voir du code .. pourquoi ne pas éditer votre question avec du code pour vérifier ce que vous faites mal. –

+0

Ajout du code et de la configuration de hornetq – tzulberti

+0

Est-ce que ma réponse a résolu votre problème? vous ne l'avez pas non plus accepté ou commenté. Dites-moi si vous avez encore besoin d'aide –

Répondre

2

L'exemple a été écrit réflexion sur le cas d'une utilisation embarquée .. Le serveur va vivre dans le cadre de votre demande. Ce qui signifie que tant que votre VM meurt, le serveur va mourir.

Sur un serveur intégré, vous devez démarrer un thread et le laisser en cours d'exécution.

En tant que hack maintenant, essayez d'ajouter un sommeil à la fin de votre départ, mais ensuite faites votre application appropriée avec un cycle de vie approprié.

Questions connexes