Рубрики
Без рубрики

Использование стартера приложения Spring Cloud

Давайте рассмотрим, как использовать Spring Cloud App starters на примере, который передает сообщения Twitter в распределенную файловую систему Hadoop.

Автор оригинала: baeldung.

1. введение

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

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

В целом, существует более 55 стартеров; ознакомьтесь с официальной документацией здесь и здесь для получения дополнительной информации об этих двух.

Затем мы создадим небольшое распределенное приложение Twitter, которое будет транслировать сообщения Twitter в распределенную файловую систему Hadoop.

2. Начало настройки

Мы будем использовать ключ потребителя и токен доступа для создания простого приложения Twitter.

Затем мы настроим Hadoop, чтобы мы могли сохранить наш поток Twitter для будущих целей больших данных.

Наконец, у нас есть возможность либо использовать поставляемые репозитории Spring GitHub для компиляции и сборки автономных компонентов шаблона архитектуры sourcesprocessors-sinks с использованием Maven, либо объединить sources , processors и sinks через их интерфейсы привязки потока Spring.

Мы рассмотрим оба способа сделать это.

Стоит отметить, что ранее все стартеры приложений allStream были собраны в одно большое репо по адресу github.com/spring-cloud/spring-cloud-stream-app-starters . Каждый стартер был упрощен и изолирован.

3. Учетные данные Twitter

Во-первых, давайте настроим наши учетные данные разработчика Twitter. Чтобы получить учетные данные разработчика Twitter, выполните действия по настройке приложения и созданию маркера доступа из официальной документации разработчика Twitter .

В частности, нам понадобится:

  1. Ключ потребителя
  2. Секрет ключа потребителя
  3. Секрет маркера доступа
  4. Токен доступа

Обязательно держите это окно открытым или запишите их, так как мы будем использовать их ниже!

4. Установка Hadoop

Далее, давайте установим Hadoop! Мы можем либо следовать официальной документации , либо просто использовать Докер:

$ sudo docker run -p 50070:50070 sequenceiq/hadoop-docker:2.4.1

5. Компиляция Наших Стартеров Приложений

Чтобы использовать автономные, полностью индивидуальные компоненты, мы можем загрузить и скомпилировать нужные стартеры приложений Spring Cloud Stream индивидуально из их репозиториев GitHub.

5.1. Запуск приложения Twitter Spring Cloud Stream

Давайте добавим приложение Twitter Spring Cloud Stream Starter ( org.springframework.cloud.stream.app.twitter stream.source ) в наш проект:

git clone https://github.com/spring-cloud-stream-app-starters/twitter.git

Затем мы запускаем Maven:

./mvnw clean install -PgenerateApps

Результирующее скомпилированное стартовое приложение будет доступно в “/target” локального корня проекта.

Затем мы можем запустить этот скомпилированный файл .jar и передать соответствующие свойства приложения следующим образом:

java -jar twitter_stream_source.jar --consumerKey= --consumerSecret= \
    --accessToken= --accessTokenSecret=

Мы также можем передать наши учетные данные, используя знакомый Spring application.properties:

twitter.credentials.access-token=...
twitter.credentials.access-token-secret=...
twitter.credentials.consumer-key=...
twitter.credentials.consumer-secret=...

5.2. Стартер приложения HDFS Spring Cloud Stream

Теперь (с уже настроенным Hadoop) давайте добавим зависимость HDFS Spring Cloud Stream App Starter ( org.springframework.cloud.stream.app.hdfs.sink ) в наш проект.

Во – первых, клонируйте соответствующее репо:

git clone https://github.com/spring-cloud-stream-app-starters/hdfs.git

Затем запустите задание Maven:

./mvnw clean install -PgenerateApps

Результирующее скомпилированное стартовое приложение будет доступно в “/target” локального корня проекта. Затем мы можем запустить этот скомпилированный файл .jar и передать соответствующие свойства приложения:

java -jar hdfs-sink.jar --fsUri=hdfs://127.0.0.1:50010/

hdfs://127.0.0.1:50010/ ‘ это значение по умолчанию для Hadoop, но порт HDFS по умолчанию может отличаться в зависимости от того, как вы настроили свой экземпляр.

Мы можем просмотреть список узлов данных (и их текущие записи) по адресу ‘ http://0.0.0.0:50070 ‘учитывая настройки, которые мы передали ранее.

Мы также можем передать наши учетные данные, используя знакомый Spring application.properties перед компиляцией, поэтому нам не нужно всегда передавать их через CLI.

Давайте настроим наш application.properties для использования порта Hadoop по умолчанию:

hdfs.fs-uri=hdfs://127.0.0.1:50010/

6. Использование Aggregate Application Builder

В качестве альтернативы мы можем объединить наш весенний поток Источник и приемник через org.springframework.cloud.stream.aggregate.AggregateApplicationBuilder в простое приложение для загрузки Spring!

Во-первых, мы добавим два стартера приложений Stream в наш pom.xml :


    
        org.springframework.cloud.stream.app
        spring-cloud-starter-stream-source-twitterstream
        2.1.2.RELEASE
    
    
        org.springframework.cloud.stream.app
        spring-cloud-starter-stream-sink-hdfs
        2.1.2.RELEASE
    

Затем мы начнем объединять наши две зависимости запуска потоковых приложений, обертывая их в соответствующие подприложения.

6.1. Создание Компонентов Нашего Приложения

Наше Исходное приложение указывает Источник , который будет преобразован или использован:

@SpringBootApplication
@EnableBinding(Source.class)
@Import(TwitterstreamSourceConfiguration.class)
public class SourceApp {
    @InboundChannelAdapter(Source.OUTPUT)
    public String timerMessageSource() {
        return new SimpleDateFormat().format(new Date());
    }
}

Обратите внимание, что мы привязываем наше Исходное приложение к org.springframework.cloud.stream.messaging.Источник и введите соответствующий класс конфигурации, чтобы получить необходимые настройки из наших свойств среды.

Затем мы настроим простой org.springframework.cloud.stream.messaging.Процессор привязка :

@SpringBootApplication
@EnableBinding(Processor.class)
public class ProcessorApp {
    @Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT)
    public String processMessage(String payload) {
        log.info("Payload received!");
        return payload;
    }
}

Затем мы создаем нашего потребителя ( Раковина ):

@SpringBootApplication
@EnableBinding(Sink.class)
@Import(HdfsSinkConfiguration.class)
public class SinkApp {
    @ServiceActivator(inputChannel= Sink.INPUT)
    public void loggerSink(Object payload) {
        log.info("Received: " + payload);
    }
}

Здесь мы привязываем наше приложение Sink к org.springframework.cloud.stream.messaging.Sink и снова введите правильный класс конфигурации, чтобы использовать указанные нами настройки Hadoop.

Наконец, мы объединяем наше SourceApp , Processor App и наше Sink App с помощью Aggregate Application Builder в нашем AggregateApp основном методе:

@SpringBootApplication
public class AggregateApp {
    public static void main(String[] args) {
        new AggregateApplicationBuilder()
          .from(SourceApp.class).args("--fixedDelay=5000")
          .via(ProcessorApp.class)
          .to(SinkApp.class).args("--debug=true")
          .run(args);
    }
}

Как и в любом приложении Spring Boot, мы можем ввести указанные параметры в качестве свойств среды через application.properties или программно.

Поскольку мы используем фреймворк Spring Stream, мы также можем передать наши аргументы в конструктор Aggregate Application Builder .

6.2. Запуск Заполненной заявки

Затем мы можем скомпилировать и запустить наше приложение, используя следующие инструкции командной строки:

    $ mvn install
    $ java -jar twitterhdfs.jar

Не забудьте сохранить каждый класс @SpringBootApplication в отдельном пакете (в противном случае будет создано несколько различных исключений привязки)! Для получения дополнительной информации о том, как использовать AggregateApplicationBuilder – ознакомьтесь с официальными документами .

После того, как мы скомпилируем и запустим наше приложение, мы должны увидеть в нашей консоли что-то вроде следующего (естественно, содержимое будет отличаться в зависимости от твита):

2018-01-15 04:38:32.255  INFO 28778 --- [itterSource-1-1] 
c.b.twitterhdfs.processor.ProcessorApp   : Payload received!
2018-01-15 04:38:32.255  INFO 28778 --- [itterSource-1-1] 
com.baeldung.twitterhdfs.sink.SinkApp    : Received: {"created_at":
"Mon Jan 15 04:38:32 +0000 2018","id":952761898239385601,"id_str":
"952761898239385601","text":"RT @mighty_jimin: 180114 ...

Они демонстрируют правильную работу нашего Процессора и приемника при получении данных из Источника ! В этом примере мы не настроили наш приемник HDFS на большую работу – он просто напечатает сообщение “Полезная нагрузка получена!”

7. Заключение

В этом уроке мы узнали, как объединить два потрясающих стартера приложений Spring Stream в один пример загрузки Sweet Spring!

Вот еще несколько замечательных официальных статей о стартерах Spring Boot и о том, как создать индивидуальный стартер !

Как всегда, код, используемый в статье, можно найти на GitHub .