Пример балансировки нагрузки 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.
Если вам нужны дополнительные разъяснения, пожалуйста, спросите.