Es folgt Dapr Ich habe versucht, Dapr zu verwenden, das die Entwicklung von Mikroservices in Java erleichtert.
Entspricht Schritt 6 von Tutorial. Code siehe unten https://github.com/koduki/example-dapr/tree/v01
Obwohl es im Tutorial Python ist, verwende ich Ruby für mein Hobby. Der Punkt dieser Konfiguration ist, dass Ruby und Java nicht direkt kommunizieren, sondern Ruby nur mit seinem Sidecar Dapr und nicht direkt mit Dapr, auf dem Java ausgeführt wird, kommuniziert.
Da der Test lokal ist, können Sie tatsächlich direkt sprechen. Aus Gründen der Übersichtlichkeit setzen wir den Java Dapr-Port auf 3500 und den Ruby Dapr-Port auf 3600.
Diesmal handelt es sich um einen supereinfachen Code, der nur einmal pro Sekunde eine Anforderung an die Ziel-API sendet.
javaapp
ist die App der Java-App. Verwenden Sie diese Option, um automatisch die richtige App für Dpar zu finden. Es ist nicht erforderlich, die IP- oder Portnummer anzugeben, auf der die API ausgeführt wird.
Der im Ruby-Code angegebene http: // localhost: # {MY_DAPR_PORT}
ist nicht der Dapr auf der Java-Seite, sondern der Dapr auf der Ruby-Seite. Es ist also immer localhost, und die Portnummer ist in diesem Fall 3600 statt 3500.
require 'net/https'
require "json"
MY_DAPR_PORT=ARGV[0]
n = 0
while true do
n += 1
params = {data: {orderId: n}}
url = "http://localhost:#{MY_DAPR_PORT}/v1.0/invoke/javaapp/method/neworder"
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)
headers = { "Content-Type" => "application/json" }
response = http.post(uri.path, params.to_json, headers)
sleep 1
end
Lass es uns laufen. Dapr scheint in der Lage zu sein, nicht nur Web-Apps, sondern auch Befehle problemlos zu verpacken. Starten Sie zunächst die API-Seite.
$ dapr run --app-id javaapp --app-port 8080 --port 3500 ./mvnw quarkus:dev
Starten Sie dann die Client-Seite in einem anderen Terminal.
$ dapr run --app-id rubyapp --port 3600 ruby app.rb 3600
Das Ausführungsergebnis auf der Java-Seite sieht wie folgt aus.
== APP == orderId: 1
== APP == orderId: 2
== APP == orderId: 3
Sie können sehen, dass es regelmäßig jede Sekunde läuft.
Sie können auch die Liste von Dapr überprüfen, die gerade ausgeführt wird, indem Sie dapr list
ausführen.
$dapr list
APP ID HTTP PORT GRPC PORT APP PORT COMMAND AGE CREATED PID
rubyapp 3600 55932 0 ruby app.rb 3600 28m 2020-05-24 21:08.13 44897
javaapp 3500 56777 8080 ./mvnw quarkus:dev 3d 2020-05-21 21:21.30 27471
Ich konnte erfolgreich über Dapr mit Ruby und Java kommunizieren.
Das Interessante an dieser Architektur ist, dass sowohl Ruby- als auch Java-Code nur mit Dapr kommunizieren, sodass Sie sich während dieser Zeit mit HTTP oder gRPC nicht zu viele Sorgen um die Sicherheit machen müssen. Es ist kein Problem, wenn Daprs Kommunikationsverschlüsselung und -authentifizierung durchführen. Daher ist es großartig, den sicherheitsrelevanten Teil entfernen zu können.
Es sollte andere Konnektoren wie Distributed Tracing, Twitter API und Kafka geben, daher möchte ich auch diese Bereiche ausprobieren. Zuerst dachte ich, dass es eine Schicht ähnlich wie KNative ist, weil es denselben Mikrodienst unterstützt, aber während dies aus Sicht der Infrastruktur wie Build-Umgebung, FaaS, Serveless ist, ist dies wesentlich mehr Mechanismus als Anwendung, daher wurde es von CNCF übernommen. Es besteht kein Zweifel, dass es sich um ein Werkzeug handelt, das in Zukunft besorgniserregend ist.
Recommended Posts