Verwenden eines Spring Cloud App Starters

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:

  1. Verbraucherschlüssel

  2. Consumer Key Secret

  3. Zugriffs-Token-Geheimnis

  4. 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.