Spring Cloud App Starterを使用する
1. 前書き
この記事では、将来の開発の出発点として使用できる、ブートストラップされたすぐに使えるアプリケーションを提供するSpring CloudAppスターターの使用方法を示します。
簡単に言えば、Task App Startersはデータベースの移行や分散テストなどのユースケース専用であり、Stream App Startersは外部システムとの統合を提供します。
次に、Twitterの投稿をHadoop分散ファイルシステムにストリーミングする小さな分散Twitterアプリケーションを構築します。
2. セットアップを取得する
consumer-keyとaccess-tokenを使用して、簡単なTwitterアプリを作成します。
次に、Hadoopをセットアップして、将来のビッグデータの目的でTwitterストリームを永続化できるようにします。
最後に、提供されているSpring GitHubリポジトリを使用して、Mavenを使用してsources –processors-sinksアーキテクチャパターンのスタンドアロンコンポーネントをコンパイルおよびアセンブルするか、sources、processorsを組み合わせるオプションがあります。 、およびsinksは、SpringStreamバインディングインターフェイスを介して。
これを行うための両方の方法を見ていきます。
以前は、すべてのStream App Starterがgithub.com/spring-cloud/spring-cloud-stream-app-startersで1つの大きなリポジトリにまとめられていたことは注目に値します。 各スターターは簡素化および分離されています。
3. Twitterの資格情報
まず、Twitter開発者の資格情報を設定しましょう。 Twitter開発者の資格情報を取得するには、手順に従ってアプリをセットアップし、アクセストークンfrom the official Twitter developer documentationを作成します。
具体的には、次のものが必要です。
-
消費者キー
-
消費者鍵の秘密
-
アクセストークンシークレット
-
アクセストークン
以下のものを使用するので、必ずそのウィンドウを開いたままにするか、それらを書き留めてください。
4. Hadoopのインストール
次に、Hadoopをインストールしましょう! the official documentationをフォローするか、単にDockerを活用することができます。
$ sudo docker run -p 50070:50070 sequenceiq/hadoop-docker:2.4.1
5. アプリスターターのコンパイル
独立した完全に個別のコンポーネントを使用するために、GitHubリポジトリから目的のSpring Cloud Stream App Startersを個別にダウンロードしてコンパイルできます。
5.1. Twitter Spring CloudStreamアプリスターター
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
コンパイルされたスターターアプリは、ローカルプロジェクトルートの「/ターゲット」で利用できます。
次に、コンパイルした.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 CloudStreamアプリスターター
ここで(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
コンパイルされたスターターアプリは、ローカルプロジェクトルートの「/ターゲット」で利用できます。 その後、コンパイルされた.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を介してこれらを常に渡す必要はありません。
デフォルトのHadoopポートを使用するようにapplication.propertiesを構成しましょう。
hdfs.fs-uri=hdfs://127.0.0.1:50010/
6. AggregateApplicationBuilderの使用
または、Spring StreamSourceとSinkをorg.springframework.cloud.stream.aggregate.AggregateApplicationBuilderを介して単純なSpringBootアプリケーションに結合することもできます。
まず、2つの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
次に、2つの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設定を使用するために正しい構成クラスを再度挿入します。
最後に、AggregateAppメインメソッドのAggregateApplicationBuilderを使用して、SourceApp、ProcessorApp、およびSinkAppを結合します。
@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);
}
}
他のSpringBootアプリケーションと同様に、プログラムで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 ...
これらは、Sourceからデータを受信する際のProcessorとSinkの正しい動作を示しています。 この例では、HDFSシンクが多くのことを実行するように構成していません。「ペイロードを受信しました!」というメッセージを出力するだけです。
7. 結論
このチュートリアルでは、2つの素晴らしいSpringStreamアプリスターターを1つの甘いSpringBootの例に組み合わせる方法を学びました。
Spring Boot Startersとcustomized starterの作成方法に関するその他の優れた公式記事をいくつか紹介します。
いつものように、記事で使用されているコードはover on GitHubにあります。