Nano Hash - криптовалюты, майнинг, программирование

Как настроить клиент HornetQ с автономным серверным кластером (настроенным с использованием JGroups TCP)

Я настроил 2 автономных сервера hornetq в кластерном режиме с использованием групп (tcp), так как я не могу использовать UDP по умолчанию. Ниже приведена конфигурация.

hornetq-configuration.xml:

<broadcast-groups>
    <broadcast-group name="bg-group1">
        <jgroups-file>jgroups-tcp.xml</jgroups-file>
        <jgroups-channel>hornetq_broadcast_channel</jgroups-channel>
        <connector-ref>netty</connector-ref>
    </broadcast-group>
</broadcast-groups>

<discovery-groups>
    <discovery-group name="dg-group1">
        <jgroups-file>jgroups-tcp.xml</jgroups-file>
        <jgroups-channel>hornetq_broadcast_channel</jgroups-channel>
        <refresh-timeout>10000</refresh-timeout>
    </discovery-group>
</discovery-groups>

Jgroups.xml:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="urn:org:jgroups"
    xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups.xsd">
<TCP bind_port="7800"
     recv_buf_size="${tcp.recv_buf_size:5M}"
     send_buf_size="${tcp.send_buf_size:5M}"
     max_bundle_size="64K"
     max_bundle_timeout="30"
     use_send_queues="true"
     sock_conn_timeout="300"

     timer_type="new3"
     timer.min_threads="4"
     timer.max_threads="10"
     timer.keep_alive_time="3000"
     timer.queue_max_size="500"

     thread_pool.enabled="true"
     thread_pool.min_threads="2"
     thread_pool.max_threads="8"
     thread_pool.keep_alive_time="5000"
     thread_pool.queue_enabled="true"
     thread_pool.queue_max_size="10000"
     thread_pool.rejection_policy="discard"

     oob_thread_pool.enabled="true"
     oob_thread_pool.min_threads="1"
     oob_thread_pool.max_threads="8"
     oob_thread_pool.keep_alive_time="5000"
     oob_thread_pool.queue_enabled="false"
     oob_thread_pool.queue_max_size="100"
     oob_thread_pool.rejection_policy="discard"/>

<TCPPING
         initial_hosts="${jgroups.tcpping.initial_hosts:hornetq-server1-ip[7800], hornetq-server1-ip[7900], hornetq-server2-ip[7800], hornetq-server2-ip[7900]}"
         port_range="1"/>
<MERGE3  min_interval="10000"
         max_interval="30000"/>
<FD_SOCK/>
<FD timeout="3000" max_tries="3" />
<VERIFY_SUSPECT timeout="1500"  />
<BARRIER />
<pbcast.NAKACK2 use_mcast_xmit="false"
               discard_delivered_msgs="true"/>
<UNICAST3 />
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
               max_bytes="4M"/>
<pbcast.GMS print_local_addr="true" join_timeout="2000"
            view_bundling="true"/>
<MFC max_credits="2M"
     min_threshold="0.4"/>
<FRAG2 frag_size="60K"  />
<!--RSVP resend_interval="2000" timeout="10000"/-->
<pbcast.STATE_TRANSFER/>

Сервера работают нормально, т.е. если лайв выходит из строя, его место занимает резервная копия.

Производитель клиента:

TransportConfiguration[] servers = new TransportConfiguration[2];
List<Configuration> configurations = ... // user defined class
for (int i = 0; i < configurations.size(); i++) {
    Map<String, Object> map = new HashMap<>();
    map.put("host", configurations.get(i).getHost());
    map.put("port", configurations.get(i).getPort());
    servers[i] = new TransportConfiguration(NettyConnectorFactory.class.getName(), map);
}
ServerLocator locator = HornetQClient.createServerLocatorWithHA(servers);
locator.setReconnectAttempts(5);

factory = locator.createSessionFactory();
session = factory.createSession();
producer = session.createProducer(queueName); 

Клиент-потребитель:

ClientSessionFactory factory = locator.createSessionFactory();
for (int i = 1; i <= nReceivers; i++) {
    ClientSession session = factory.createSession(true, true, 1);
    sessions.add(session);
    if (i == 1) {
        Thread.sleep(10000); // waiting to download cluster information
    }
    session.start();
    ClientConsumer consumer = session.createConsumer(queueName);
    consumer.setMessageHandler(handler);
}

Проблема:

  1. Клиент (производитель) не отступает автоматически, если сервер, к которому он подключен, выходит из строя во время отправки сообщений.
  2. Сеансы, созданные с использованием одной и той же клиентской фабрики, всегда подключаются к одному серверу (в отличие от документации http://docs.jboss.org/hornetq/2.3.0.beta1/docs/user-manual/html/clusters.html#clusters.client.loadbalancing )

Таким образом, кажется, что клиент никогда не получает информацию о кластере. Я также не нашел никакой документации по настройке клиента для использования jgroups (необходимых?) для подключения к кластеру hornetq.

Любая помощь приветствуется.


Ответы:


1

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

03.04.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..