C'est Dapr suivant j'ai essayé d'utiliser Dapr qui facilite le développement de microservices en Java.
Correspond à l'étape 6 du Tutoriel. Voir ci-dessous pour le code https://github.com/koduki/example-dapr/tree/v01
Bien que ce soit Python dans le didacticiel, j'utilise Ruby pour mon hobby. L'intérêt de cette configuration est que Ruby et Java ne communiquent pas directement, mais Ruby ne parle qu'à son side-car Dapr et pas directement à Dapr exécutant Java.
Comme le test est local, vous pouvez parler directement, mais par souci de clarté, définissons le port Java Dapr sur 3500 et le port Ruby Dapr sur 3600.
Cette fois, c'est un code super simple qui ne fait qu'une requête à l'API cible une fois par seconde.
javaapp
est l'appid de l'application Java. Utilisez-le pour trouver automatiquement la bonne application pour Dpar. Il n'est pas nécessaire de spécifier l'adresse IP ou le numéro de port sur lequel l'API s'exécute.
Le http: // localhost: # {MY_DAPR_PORT}
spécifié dans le code Ruby n'est pas le Dapr du côté Java mais le Dapr du côté Ruby. Donc c'est toujours localhost, et le numéro de port est 3600 au lieu de 3500 dans ce cas.
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
Lançons-le. Dapr semble être capable d'encapsuler non seulement des applications Web, mais également des commandes sans problème. Tout d'abord, lancez le côté API.
$ dapr run --app-id javaapp --app-port 8080 --port 3500 ./mvnw quarkus:dev
Puis lancez le côté client dans un autre terminal.
$ dapr run --app-id rubyapp --port 3600 ruby app.rb 3600
En regardant le résultat de l'exécution du côté Java, c'est comme suit.
== APP == orderId: 1
== APP == orderId: 2
== APP == orderId: 3
Vous pouvez voir qu'il fonctionne régulièrement toutes les secondes.
Vous pouvez également vérifier la liste des Dapr en cours d'exécution en exécutant dapr list
.
$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
J'ai pu communiquer avec succès avec Ruby et Java via Dapr.
La chose intéressante à propos de cette architecture est que le code Ruby et Java ne parlent qu'à Dapr, vous n'avez donc pas à vous soucier trop de la sécurité pendant ce temps avec HTTP ou gRPC. Il n'y a pas de problème si les Daprs effectuent le cryptage et l'authentification des communications, c'est donc formidable de pouvoir supprimer la partie liée à la sécurité.
Il devrait y avoir d'autres connecteurs tels que le traçage distribué, l'API Twitter et Kafka, alors j'aimerais également essayer ces domaines. Au début, je pensais que c'était une couche similaire à KNative car elle prend en charge le même micro service, mais bien que cela soit du point de vue de l'infrastructure telle que l'environnement de construction, FaaS, Serveless, c'est beaucoup plus de mécanisme que d'application, il a donc été adopté par CNCF. Il ne fait aucun doute qu’il s’agit d’un outil préoccupant pour l’avenir.