Essayez d'intégrer Ruby et Java avec Dapr

introduction

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

Présentation de la configuration

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.

dapr_sample01.png

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.

code

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

Exécuter et confirmer

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  

Résumé

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.

Recommended Posts

Essayez d'intégrer Ruby et Java avec Dapr
Lier le code Java et C ++ avec SWIG
Essayons WebSocket avec Java et javascript!
Conversion de JSON en TSV et TSV en JSON avec Ruby
De Java à Ruby !!
Essayez d'obtenir la clé API de redmine avec ruby
Essayez d'implémenter TCP / IP + NIO avec JAVA
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
[Java] Se référer et définir des variables privées avec réflexion
Je veux faire des transitions d'écran avec kotlin et java!
Essayez de vous connecter à l'émulateur AzureCosmosDB pour Docker avec Java
Essayez la connexion DB avec Java
Essayez gRPC avec Java, Maven
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Méthode de paramétrage pour lier Java d'Eclipse et Github / septembre 2017
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
Je veux implémenter diverses fonctions avec kotlin et java!
Comment gérer différentes versions de rbenv et Ruby
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 1)
Java pour apprendre avec les ramen [Partie 1]
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
Installez Java et Tomcat avec Ansible
Essayez d'implémenter Yuma dans Ruby
[Java] Points à noter avec Arrays.asList ()
Osez défier Kaggle avec Java (1)
Utilisez JDBC avec Java et Scala.
Essayez d'utiliser Redis avec Java (jar)
J'ai essayé d'interagir avec Java
Suivez le lien avec Selenium (Java)
Sortie PDF et TIFF avec Java 8
[Java] Essayez de mettre en œuvre à l'aide de génériques
Essayez d'extraire la méthode publique de java
Essayez la communication bidirectionnelle avec gRPC Java
Essayez d'implémenter Yuma en Java
Java, des tableaux pour débuter avec les débutants
Crypter avec Java et décrypter avec C #
Modèle de conception à essayer avec le modèle Swift-Iterator qui prend en charge Array et Dictionary
Je veux revenir à l'écran précédent avec kotlin et java!
Essayez d'accélérer le démarrage des programmes de console Java avec l'image native de GraalVM
Exécutez logstash avec Docker et essayez de télécharger des données sur Elastic Cloud
AtCoder ARC 081 C hash à résoudre en Ruby, Perl et Java
Lisez les données de Shizuoka Prefecture Point Cloud DB avec Java et essayez de détecter la hauteur de l'arbre.
Avec ruby ● × Game et Othello (examen de base)
Interface Essayez de créer un problème Java TypeScript 7-3
[Ruby / Refactoring] Du traitement itératif Ruby tel que Java et C au traitement itératif de type Ruby
Essayez de résoudre Project Euler en Java
Comment compiler Java avec VsCode & Ant
Surveillez les applications Java avec jolokia et hawtio
Premiers pas avec Ruby pour les ingénieurs Java
[Java] Résumez comment comparer avec la méthode equals
Essayez d'implémenter l'ajout n-aire en Java