Использование Spring Cloud App Starter

Использование Spring Cloud App Starter

1. Вступление

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

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

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

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

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

Мы будем использоватьconsumer-key иaccess-token, чтобы создать простое приложение Twitter.

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

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

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

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

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

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

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

  1. Ключ потребителя

  2. Секретный ключ

  3. Секрет токена доступа

  4. Токен доступа

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

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

Теперь давайте установим Hadoop! Мы можем либо следоватьthe official documentation, либо просто использовать Docker:

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

5. Компиляция наших приложений для начинающих

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

5.1. Приложение Twitter Spring Cloud Stream для начинающих

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

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

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

./mvnw clean install -PgenerateApps

Полученное в результате скомпилированное стартовое приложение будет доступно в target / target 'корневого каталога локального проекта.

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

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

Мы также можем передать наши учетные данные, используя знакомый Springapplication.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 / 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» с учетом конфигурации, которую мы передали ранее.

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

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

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

6. ИспользуяAggregateApplicationBuilder

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

Сначала мы добавим два Stream App Starter в нашpom.xml:


    
        org.springframework.cloud.stream.app
        spring-cloud-starter-stream-source-twitterstream
        1.3.1.BUILD-SNAPSHOT
    
    
        org.springframework.cloud.stream.app
        spring-cloud-starter-stream-sink-hdfs
        1.3.1.BUILD-SNAPSHOT
    

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

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

НашSourceApp указываетSource для преобразования или потребления:

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

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

Далее мы настраиваем простую привязкуorg.springframework.cloud.stream.messaging.Processor:

@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;
    }
}

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

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

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

Наконец, мы объединяем нашиSourceApp,ProcessorApp и нашSinkApp, используяAggregateApplicationBuilder в нашем основном методе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 or.

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

6.2. Запуск завершенного приложения

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

    $ mvn install
    $ java -jar twitterhdfs.jar

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

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

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.example.twitterhdfs.sink.SinkApp    : Received: {"created_at":
"Mon Jan 15 04:38:32 +0000 2018","id":952761898239385601,"id_str":
"952761898239385601","text":"RT @mighty_jimin: 180114 ...

Они демонстрируют правильную работу нашихProcessor иSink при получении данных отSource! В этом примере мы не настроили наш приемник HDFS для работы - он просто выведет сообщение «Payload Receiver!»

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

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

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

Как всегда, код, использованный в статье, находится вover on GitHub.