Конфигурация встроенного кластера HornetQ

Я пытаюсь запустить конфигурацию встроенного кластера, но мне это не удалось. Я использовал пример кластера, который был найден в примерах hornetq. Это работает, я не должен запускать примеры, используя встроенный 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);
        }
    }       
}

А это конфигурационный файл 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>

person tzulberti    schedule 12.10.2011    source источник
comment
Мне нужно увидеть какой-нибудь код. Почему бы вам не отредактировать свой вопрос с помощью кода, чтобы проверить, что вы делаете неправильно.   -  person Clebert Suconic    schedule 13.10.2011
comment
Добавлен код и конфигурация Hornetq   -  person tzulberti    schedule 13.10.2011
comment
Мой ответ решил вашу проблему? вы его не приняли и не прокомментировали. Дайте мне знать, если вам все еще нужна помощь   -  person Clebert Suconic    schedule 17.10.2011


Ответы (1)


Пример был написан с учетом встроенного варианта использования. Сервер будет жить как часть вашего приложения. Что означает, что пока ваша виртуальная машина умирает, сервер умирает.

На встроенном сервере вы должны запустить поток и оставить его работающим.

Как хак сейчас, попробуйте добавить сон в конце вашего запуска, но затем создайте правильное приложение с правильным жизненным циклом.

person Clebert Suconic    schedule 14.10.2011