Пример балансировки нагрузки Camel с использованием Mina с Java DSL

Итак, недавно я начал изучать верблюда. В рамках этого процесса я решил просмотреть все примеры (перечислены ЗДЕСЬ и доступны, когда вы ЗАГРУЗИТЕ пакет со всеми примерами и документами) и посмотреть, что я смогу выучить.

Один из примеров, " Балансировка нагрузки с использованием Mina", привлек мое внимание, поскольку он использует Mina в разных JVM и имитирует балансировщик нагрузки с циклическим перебором.

У меня есть несколько проблем с этим примером. Сначала он использует Spring DSL, а не Java DSL, который использует мой проект и который я нахожу намного проще для понимания (главным образом потому, что я к нему привык). Итак, первый вопрос: существует ли версия этого примера, использующая только DSL Java вместо Spring DSL для маршрутов и компонентов?

Мой второй вопрос связан с кодом. В описании говорится, и я цитирую:

В этой демонстрации каждые десять секунд с сервера балансировки нагрузки Camel создается объект отчета. Этот объект отправляется балансировщиком нагрузки Camel на сервер MINA, где объект затем сериализуется. Один из двух серверов MINA (localhost:9991 и localhost:9992) получает объект и обогащает сообщение, устанавливая поле ответа объекта Report. Ответ отправляется обратно сервером MINA клиенту, который затем регистрирует ответ на консоли.

Итак, из того, что я прочитал, я понимаю, что сервер MINA 1 (для каждого примера) получает отчет от loadbalancer, изменяет его и затем отправляет этот отчет обратно невидимому клиенту. После проверки кода я не вижу клиентского java-класса или XML, и при запуске сервер просто публикует результаты в командной строке. Где клиент?? Что это за клиент?

Код сервера MINA-1 представлен здесь:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <bean id="service" class="org.apache.camel.example.service.Reporting"/>

  <camelContext xmlns="http://camel.apache.org/schema/spring">

    <route id="mina1">
      <from uri="mina:tcp://localhost:9991"/>
      <setHeader headerName="minaServer">
        <constant>localhost:9991</constant>
      </setHeader>
      <bean ref="service" method="updateReport"/>
    </route>

  </camelContext>

</beans>

Я не понимаю как updateReport() Метод волшебным образом печатает объект на моей консоли. Что если я хочу отправить сообщение на третий сервер MINA? Как бы я это сделал? (Мне нужно добавить новый маршрут и отправить его на URI 3-го сервера правильно?)

Я знаю, что большинство этих вопросов могут показаться глупыми, но я был бы признателен, если бы кто-нибудь мог мне помочь. Версия Java DSL это действительно поможет мне.

2 ответа

Решение

В предыдущем посте у меня было 2 вопроса: 1. Как добавить еще один сервер mina 2. Почему серверы mina отправляют ответы.

Namphibian ответил на проблему 1, но не на проблему 2. Однако я нашел решение здесь: http://camel.465427.n5.nabble.com/Load-balancing-using-Mina-example-with-Java-DSL-td5742566.html

Престижность г-ну Клаусу за ответ и предложения.

PS: Если вы отредактируете свой пост, чтобы он содержал эту информацию, я с удовольствием выберу его в качестве ответа

Клиент находится на этом маршруте.

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:camel="http://camel.apache.org/schema/spring"
   xsi:schemaLocation="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <bean id="service" class="org.apache.camel.example.service.Generator"/>

  <camelContext xmlns="http://camel.apache.org/schema/spring">

  <route id="sendMessage">
    <from uri="timer://org.apache.camel.example.loadbalancer?period=10s"/>
    <bean ref="service" method="createReport"/>
    <to uri="direct:loadbalance"/>
  </route>

    <!-- use failover load balancer in round robin mode, to automatic failover to next server
         in case of failure -->
  <route id="loadbalancer">
      <from uri="direct:loadbalance"/>
      <loadBalance inheritErrorHandler="false">
        <failover roundRobin="true"/>
        <to uri="mina:tcp://localhost:9991?sync=true"/>
        <to uri="mina:tcp://localhost:9992?sync=true"/>
      </loadBalance>
    <log message="${body}"/>
  </route>
  </camelContext>
</beans>

Обратите внимание, что есть компонент времени:

<from uri="timer://org.apache.camel.example.loadbalancer?period=10s"/>

Этот компонент вызывает метод createReport компонента службы, который является типом класса: org.apache.camel.example.service.Generator, Это клиент.

Чтобы добавить дополнительный сервер MINA, используйте следующий Spring DSL.

 <loadBalance inheritErrorHandler="false">
    <failover roundRobin="true"/>
    <to uri="mina:tcp://localhost:9991?sync=true"/>
    <to uri="mina:tcp://localhost:9992?sync=true"/>
    <to uri="mina:tcp://localhost:9993?sync=true"/>
 </loadBalance>

Затем создайте третьего потребителя MINA следующим образом:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:camel="http://camel.apache.org/schema/spring"
   xsi:schemaLocation="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <bean id="service" class="org.apache.camel.example.service.Reporting"/>

  <camelContext xmlns="http://camel.apache.org/schema/spring">

   <route id="mina2">
    <from uri="mina:tcp://localhost:9993"/>
     <setHeader headerName="minaServer">
       <constant>localhost:9993</constant>
     </setHeader>
     <bean ref="service" method="updateReport"/>
    </route>

  </camelContext>

</beans>

Обратите внимание, что для этого потребуется дополнительно запустить сервер MINA3 при запуске примера. Маршруты клиента и балансировщика нагрузки (2 маршрута) находятся в одном файле верблюда.

Я бы посоветовал вам научиться читать Spring DSL, поскольку это действительно того стоит. Также, если вы не знакомы с Spring, вам нужен учебник для начинающих. Часть внедрения зависимости особенно важна.

Последней рекомендацией было бы купить себе "Верблюд в действии". Это действительно отличный способ начать работать с Camel.

Если вам нужны дополнительные разъяснения, пожалуйста, спросите.

Другие вопросы по тегам