Spring (boot) не очень подходит для Storm. Storm - это фреймворк, то есть он отвечает за управление жизненным циклом некоторых классов, таких как ваш болт. Поскольку Storm ничего не знает о Spring, внедрение зависимостей Spring не работает «из коробки». Можно настроить Spring для работы с частями приложения Storm, например, с помощью задача и рабочие хуки , которые могут позволить вам создать контекст Spring в Storm worker. Я не думаю, что я бы порекомендовал это, если у вас нет веских причин, чтобы нуждаться в весне.
Что касается ошибки, которую вы получаете, Storm не может найти один из ваших классов в банке, которую вы отправляете. Поскольку вы не опубликовали свой pom.xml для своей конфигурации Spring, это трудно сказать, но, возможно, вы используете плагин, который перемещает ваши классы. Когда вы отправляете топологию в Storm, Storm выполняет несколько этапов, которые вы должны понимать:
Сначала вы делаете storm jar com.yourcompany.yourMain
. Это запустит JVM на вашем локальном компьютере (или везде, где вы запускаете команду), который запускает настройку вашей топологии, в вашем случае MyTopology.main
. Затем установка сериализует ваши изливы и болты и отправляет банку и сериализованную топологию в Nimbus (отдельную JVM), которая, в свою очередь, отправляет ее супервизорам (еще одной отдельной JVM). На супервизорах JVM супервизора загружает несколько рабочих JVM для запуска вашей топологии. Каждая рабочая JVM запускается с помощью команды, подобной java -cp your-topology.jar org.apache.storm.Worker
. Рабочие JVM загружают сериализованную топологию и классы в вашем банке топологии и загружают потоки для запуска носиков и болтов.
Эти этапы, скорее всего, являются причиной того, что он не работает для вас. Когда вы запускаете код установки топологии, вы делаете это с помощью команды Spring Boot, поэтому Spring Boot получает шанс на запуск. Когда топология запускается на рабочих машинах, JVM запускаются обычным старым вызовом основного метода, отличного от Spring, поэтому Spring не получает возможности для запуска.
Если вы решите не использовать Spring, вы можете найти рабочий пример POM здесь .
Другие ссылки, которые могут представлять интерес: более ранний ответ и проект , выполняющий интеграцию Spring для Storm.