Von nun an planen wir, uns mit Mikrodiensten zu befassen, die rund um Play Framework (im Folgenden als Play bezeichnet) erstellt wurden. Das Spiel hat jedes Mal, wenn die Version auf 0,1 steigt, eine ganze Reihe von Änderungen. Um einige in der vorherigen Version implementierte Dienste auf die neueste Version zu aktualisieren, werde ich im Moment die neueste Version von Play Framework 2.7 (erneut) einführen. Ich verwende selten Version 2.6, daher werde ich bei Bedarf mit den Kenntnissen von Version 2.6 Schritt halten.
Play macht es einfach, ein Projekt basierend auf sbt zu starten (Befehl seed template unten).
Spielen Sie die neueste Versionsvorlage für Java:
sbt new playframework/play-java-seed.g8
Spielen Sie die neueste Versionsvorlage für Scala:
sbt new playframework/play-scala-seed.g8
Das erstmalige Starten dauert jedoch lange, da die abhängigen Bibliotheken aus jedem Repository gesammelt werden. Wenn Sie Play ausprobieren, ist es eine gute Idee, einen der oben genannten Befehle zu drücken, dann sbt auszuführen und dann die erforderlichen Informationen zu sammeln.
In meinem Fall dauerte es ungefähr 6 Minuten, bis Play im Entwicklermodus gestartet wurde, und ungefähr 30 Sekunden, bis der Browser auf Port 9000 zugegriffen, die erste Kompilierung abgeschlossen und eine Antwort erhalten hatte. Je nach Leitungszustand dauert es länger.
Lesen Sie "Play 2.7.0 ist da!" im Play Framework-Blog. Dort werden acht neue Funktionen von Play 2.7 aufgelistet. Unten mein Eindruck:
Ein auf akka-grpc basierendes play-grpc wurde zur Verfügung gestellt. Aus der Perspektive der Entwicklung von Microservices bin ich glücklich (obwohl es derzeit als Inkubation behandelt wird). Wenn grpc standardmäßig unterstützt wird, ist die Integration mit anderen Diensten mithilfe von Standardschemasprachen wie Protokollpuffern einfacher. Wenn Sie keine Protokollpuffer usw. verwendet haben, erhalten Sie ein Bild der folgenden Schemasprache.
Die Zeiten, in denen wir nur eine einzige Web-App schreiben konnten, die eine Verbindung zu einer einzelnen RDB herstellt, sind vorbei. Die Daten können hier und da in verschiedenen Speichertechnologien gespeichert werden, das Backend kann anstelle eines einzelnen Dienstes aufgeteilt werden, und die Clients können Web-, iOS- und Android-Versionen in jeweils einer anderen Sprache haben. Es ist in implementiert und die API muss auch externen Entwicklern zugänglich gemacht werden. Daher ist es notwendig, die Daten überall zu serialisieren und zu deserialisieren und sicherzustellen, dass es an beiden Enden der Kommunikation keine Inkonsistenzen bei der Interpretation gibt. Es ist jedoch schmerzhaft, zum Zweck des Abgleichs mit Menschen in natürlicher Sprache zu sprechen. Daher möchten wir mit maschinenverarbeitbarem Code sprechen. Daher möchte ich richtig definieren, welche Art von Daten im deklarativen DSL enthalten sein werden. Es ist also eine Schemasprache. (Ausstellung [Warum die Schemasprache wichtig ist](https://qiita.com/yugui/items/160737021d25d761b353#%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E % E8% A8% 80% E8% AA% 9E% E3% 81% AF% E3% 81% AA% E3% 81% 9C% E9% 87% 8D% E8% A6% 81% E3% 81% AA% E3 % 81% AE% E3% 81% 8B))
Um sich ein Bild vom Code zu machen, schauen wir uns das Hello World Grpc-Beispiel in Play2.7 Grpc an.
Hello World grpc Schema Definition durch Protokollpuffer:
//(Auszug)
package helloworld;
service GreeterService {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Implementierungsbeispiel für Greeter Service von Play2.7.
GreeterServiceImpl.scala
/*
* Copyright (C) 2018-2019 Lightbend Inc. <https://www.lightbend.com>
*/
package example.myapp.helloworld.grpc.helloworld
import akka.stream.Materializer
import javax.inject.Inject
import javax.inject.Singleton
import scala.concurrent.Future
/** User implementation, with support for dependency injection etc */
@Singleton
class GreeterServiceImpl @Inject()(implicit mat: Materializer) extends AbstractGreeterServiceRouter(mat) {
//Erhalten Sie Hallo Anfrage und Zukunft[HelloReply]SayHello-Methode, die zurückgibt
override def sayHello(in: HelloRequest): Future[HelloReply] =
Future.successful(HelloReply(s"Hello, ${in.name}!"))
}
// #service-impl
Wenn Sie akka noch nie verwendet haben, gibt es einige Begriffe, die Sie nicht sehen können. Schauen wir uns jedoch nur die sayHello-Methode an. Da die Antwort der Methode Future [Hello Reply] lautet, ist ersichtlich, dass die Dienste asynchron ausgetauscht werden. Dieses Beispiel basiert derzeit auf Scala, Java kann jedoch auch in Future-basiert geschrieben werden. Die obige sayHello-Methode scheint in Java so geschrieben werden zu können.
@Override
public CompletionStage<HelloReply> sayHello(HelloRequest in) {
String message = String.format("Hello, %s!", in.getName());
HelloReply reply = HelloReply.newBuilder().setMessage(message).build();
return CompletableFuture.completedFuture(reply);
}
Beispielcode und Dokumentation für grpc werden unten entwickelt. https://developer.lightbend.com/docs/play-grpc https://github.com/playframework/play-grpc
Es wäre großartig, wenn der grpc von play2.7 der Auslöser dafür sein könnte, dass wichtige JVM-basierte Frameworks (Spring-based) über grpc miteinander verbunden werden. Wenn der Service wächst, ist es möglicherweise einfacher, die Teile, die von der Garbage Collection stark betroffen sind, durch C ++ oder Go zu ersetzen.
Es scheint, dass Akka Coordinated Shutdown, das aus Play 2.6 eingeführt wurde, in 2.7 in den Play-Lebenszyklus aufgenommen wurde. Dies ist eigentlich Play 2.7, und Sie werden es zu schätzen wissen, wenn Sie einen Dienst erstellen, der jederzeit nach oben und unten skaliert werden kann.
Play Cache APIs basieren jetzt auf Java 8-basiertem Koffein. Koffein scheint in Spring Boot und so weiter verwendet zu werden. Diese PAI kann die Notwendigkeit verringern, Redis usw. extern zu starten und zwischenzuspeichern.
Ich kann keine Kommentare abgeben, da ich "Content Security Policy (https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)" nicht studiert habe, aber ich möchte diese Gelegenheit nutzen, um loszulegen.
Referenz Inhaltsrichtlinie (CSP)
Dies scheint in Java nett zu sein. Senden Sie einfach Formulare, vereinfachen Sie den Code, wenn Sie zu HTTP-Anforderungen zurückkehren (damit Sie ohne HTTP.Context schreiben können) usw.
Auf der anderen Seite funktioniert der vorherige Schreibstil im Spiel oft nicht bei jedem Upgrade. Seien Sie also vorsichtig, wenn Sie den Schreibstil ändern. Die zweite Hälfte der Release-Highlights ist aufgelistet. https://www.playframework.com/documentation/2.7.x/Highlights27
Sie werden es zu schätzen wissen, wenn Sie eine REST-API in Play 2.7 schreiben. Persönlich möchte ich, dass Play graphql aktiv unterstützt, das die asynchrone Basis nutzt.
Ich möchte ein Beispiel für einen Mikrodienst schreiben, der grpc als Kleber (Konnektor) in Play 2.7 mit dem Ziel der Goldenen Woche verwendet.
Recommended Posts