Verwenden eines Spring Cloud App Starters
1. Einführung
In diesem Artikel zeigen wir Ihnen, wie Sie die Spring Cloud App-Starter verwenden, die Bootstrap- und einsatzbereite Anwendungen bereitstellen und als Ausgangspunkt für zukünftige Entwicklungen dienen können.
Einfach ausgedrückt, Task App Starter sind für Anwendungsfälle wie Datenbankmigration und verteiltes Testen vorgesehen, und Stream App Starter bieten Integrationen mit externen Systemen.
Insgesamt gibt es über 55 Vorspeisen; Weitere Informationen zu diesen beiden finden Sie in der offiziellen Dokumentationhere undhere.
Als Nächstes erstellen wir eine kleine verteilte Twitter-Anwendung, mit der Twitter-Beiträge in ein verteiltes Hadoop-Dateisystem gestreamt werden.
2. Setup abrufen
Wir werden dieconsumer-key undaccess-token verwenden, um eine einfache Twitter-App zu erstellen.
Anschließend richten wir Hadoop ein, damit wir unseren Twitter-Stream für zukünftige Big Data-Zwecke beibehalten können.
Zuletzt haben wir die Möglichkeit, entweder die mitgelieferten Spring GitHub-Repositorys zu verwenden, um eigenständige Komponenten des Architekturmusterssources -processors-sinksmit Maven zu kompilieren und zusammenzusetzen, odersources,processors zu kombinieren undsinks über ihre Spring Stream-Bindungsschnittstellen.
Wir werden uns beide Möglichkeiten ansehen, um dies zu erreichen.
Es ist erwähnenswert, dass früher alle Stream App-Starter zu einem großen Repo beigithub.com/spring-cloud/spring-cloud-stream-app-starters zusammengefasst wurden. Jeder Starter wurde vereinfacht und isoliert.
3. Twitter-Anmeldeinformationen
Lassen Sie uns zunächst unsere Anmeldeinformationen für Twitter-Entwickler einrichten. Befolgen Sie die Schritte zum Einrichten einer App und zum Erstellen eines Zugriffstokensfrom the official Twitter developer documentation, um Anmeldeinformationen für Twitter-Entwickler abzurufen.
Insbesondere benötigen wir:
-
Verbraucherschlüssel
-
Consumer Key Secret
-
Zugriffs-Token-Geheimnis
-
Zugangstoken
Stellen Sie sicher, dass das Fenster offen bleibt, oder notieren Sie diese, da wir die folgenden verwenden werden!
4. Hadoop installieren
Als nächstes installieren wir Hadoop! Wir können entwederthe official documentation folgen oder einfach Docker nutzen:
$ sudo docker run -p 50070:50070 sequenceiq/hadoop-docker:2.4.1
5. Kompilieren unserer App-Starter
Um freistehende, vollständig individuelle Komponenten zu verwenden, können wir die gewünschten Spring Cloud Stream-App-Starter einzeln aus ihren GitHub-Repositorys herunterladen und kompilieren.
5.1. Twitter Spring Cloud Stream App Starter
Fügen wir unserem Projekt den Twitter Spring Cloud Stream App-Starter (org.springframework.cloud.stream.app.twitterstream.source) hinzu:
git clone https://github.com/spring-cloud-stream-app-starters/twitter.git
Dann führen wir Maven aus:
./mvnw clean install -PgenerateApps
Die resultierende kompilierte Starter-App steht im lokalen Projektstamm unter "/ target" zur Verfügung.
Dann können wir das kompilierte .jar ausführen und die relevanten Anwendungseigenschaften wie folgt übergeben:
java -jar twitter_stream_source.jar --consumerKey= --consumerSecret= \
--accessToken= --accessTokenSecret=
Wir können unsere Anmeldeinformationen auch mit den bekannten Springapplication.properties: übergeben
twitter.credentials.access-token=...
twitter.credentials.access-token-secret=...
twitter.credentials.consumer-key=...
twitter.credentials.consumer-secret=...
5.2. HDFS Spring Cloud Stream App Starter
Fügen wir nun (mit Hadoop bereits eingerichtet) die Abhängigkeit des HDFS Spring Cloud Stream App-Starters (org.springframework.cloud.stream.app.hdfs.sink) zu unserem Projekt hinzu.
Klonen Sie zunächst das relevante Repo:
git clone https://github.com/spring-cloud-stream-app-starters/hdfs.git
Führen Sie dann den Maven-Job aus:
./mvnw clean install -PgenerateApps
Die resultierende kompilierte Starter-App steht im lokalen Projektstamm unter "/ target" zur Verfügung. Wir können dann die kompilierte .jar-Datei ausführen und relevante Anwendungseigenschaften übergeben:
java -jar hdfs-sink.jar --fsUri=hdfs://127.0.0.1:50010/
'hdfs://127.0.0.1:50010/' ist die Standardeinstellung für Hadoop, aber Ihr Standard-HDFS-Port kann je nach Konfiguration Ihrer Instanz variieren.
Wir können die Liste der Datenknoten (und ihrer aktuellen Ports) bei "http://0.0.0.0:50070" sehen, wenn die zuvor übergebene Konfiguration angegeben ist.
Wir können unsere Anmeldeinformationen auch vor dem Kompilieren mit den bekannten Springapplication.properties übergeben, sodass wir diese nicht immer über die CLI übergeben müssen.
Konfigurieren Sie unsereapplication.propertieso, dass sie den Standard-Hadoop-Port verwenden:
hdfs.fs-uri=hdfs://127.0.0.1:50010/
6. Verwenden vonAggregateApplicationBuilder
Alternativ können wir unsere Spring StreamSource undSink durch dieorg.springframework.cloud.stream.aggregate.AggregateApplicationBuilder zu einer einfachen Spring Boot-Anwendung kombinieren!
Zuerst fügen wir die beiden Stream-App-Starter zu unserenpom.xmlhinzu:
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
Anschließend kombinieren wir unsere beiden Stream App Starter-Abhängigkeiten, indem wir sie in ihre jeweiligen Unteranwendungen einbinden.
6.1. Erstellen unserer App-Komponenten
UnsereSourceApp geben dieSource an, die transformiert oder verbraucht werden sollen:
@SpringBootApplication
@EnableBinding(Source.class)
@Import(TwitterstreamSourceConfiguration.class)
public class SourceApp {
@InboundChannelAdapter(Source.OUTPUT)
public String timerMessageSource() {
return new SimpleDateFormat().format(new Date());
}
}
Beachten Sie, dass wir unsereSourceApp anorg.springframework.cloud.stream.messaging.Source binden und die entsprechende Konfigurationsklasse einfügen, um die erforderlichen Einstellungen aus unseren Umgebungseigenschaften zu übernehmen.
Als nächstes richten wir eine einfacheorg.springframework.cloud.stream.messaging.Processor-Bindung: ein
@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;
}
}
Dann erstellen wir unseren Verbraucher (Sink):
@SpringBootApplication
@EnableBinding(Sink.class)
@Import(HdfsSinkConfiguration.class)
public class SinkApp {
@ServiceActivator(inputChannel= Sink.INPUT)
public void loggerSink(Object payload) {
log.info("Received: " + payload);
}
}
Hier binden wir unsereSinkApp anorg.springframework.cloud.stream.messaging.Sink und fügen erneut die richtige Konfigurationsklasse ein, um unsere angegebenen Hadoop-Einstellungen zu verwenden.
Zuletzt kombinieren wir unsereSourceApp,ProcessorApp und unsereSinkApp unter Verwendung derAggregateApplicationBuilder in unserer HauptmethodeAggregateApp:
@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);
}
}
Wie bei jeder Spring Boot-Anwendung können wir bestimmte Einstellungen programmgesteuert überapplication.properties or als Umgebungseigenschaften einfügen.
Da wir das Spring Stream-Framework verwenden, können wir unsere Argumente auch an den KonstruktorAggregateApplicationBuilderübergeben.
6.2. Ausführen der abgeschlossenen App
Anschließend können wir unsere Anwendung mithilfe der folgenden Befehlszeilenanweisungen kompilieren und ausführen:
$ mvn install
$ java -jar twitterhdfs.jar
Denken Sie daran, jede@SpringBootApplication-Klasse in einem separaten Paket aufzubewahren (andernfalls werden mehrere verschiedene Bindungsausnahmen ausgelöst)! Weitere Informationen zur Verwendung vonAggregateApplicationBuilder finden Sie unterofficial docs.
Nachdem wir unsere App kompiliert und ausgeführt haben, sollten wir in unserer Konsole Folgendes sehen (natürlich variiert der Inhalt je nach Tweet):
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 ...
Diese zeigen den korrekten Betrieb unsererProcessor undSink beim Empfang von Daten vonSource! In diesem Beispiel haben wir unser HDFS-Waschbecken nicht so konfiguriert, dass es viel bewirkt. Es wird einfach die Meldung "Payload Received!"
7. Fazit
In diesem Tutorial haben wir gelernt, wie Sie zwei fantastische Spring Stream App-Starter zu einem süßen Spring Boot-Beispiel kombinieren können!
Hier sind einige andere großartige offizielle Artikel überSpring Boot Starters und wie man eincustomized starter erstellt!
Wie immer ist der im Artikel verwendete Codeover on GitHub.