Bonjour Habr ! Je vous présente la traduction de l'article auteur Bernd Rücker.
07.07.2020, traduction Bernd Rücker

Je discute souvent de l'architecture microservices avec des personnes qui ne connaissent pas Java : des développeurs C#, Node.JS/JavaScript ou des adeptes de Golang. Ils rencontrent tous le besoin d'un mécanisme d'orchestration dans l'architecture microservices ou simplement d'un outil pour optimiser le flux de travail, permettant d'organiser, de gérer des délais, des saga et des transactions compensatoires.
La plateforme BPM avec est parfaitement adaptée à ces tâches. La convivialité pour les développeurs est l'une des caractéristiques clés du produit. Cependant, en consultant sa documentation, il peut sembler que la « convivialité » de Camunda est principalement destinée aux développeurs Java. La plateforme offre de nombreuses possibilités d'intégration de fonctionnalités et d'extensions personnalisées, mais tout cela se fait en Java. Est-ce vraiment le cas ?
Non ! En réalité, il est facile de lancer Camunda sans aucune connaissance de Java et de configurer l'architecture pour du code dans n'importe quel langage de votre choix. Dans cet article, nous allons examiner :
- l'architecture de base ;
- l'API REST ;
- des conseils sur les bibliothèques clientes existantes pour des langages autres que Java ;
- un exemple d'utilisation de C# et Node.JS ;
- les manières de lancer le serveur Camunda (Docker ou Tomcat).
Architecture
Camunda est écrit en Java et nécessite une machine virtuelle Java (JVM) pour fonctionner. Camunda fournit une API REST qui vous permet d'écrire dans n'importe quel langage que vous aimez et d'utiliser REST avec Camunda :

Les workflows dans Camunda sont définis en BPMN, qui est essentiellement un fichier XML. Ils peuvent être modélisés à l'aide de .
Lancer Camunda via une image Docker préconçue
Le moyen le plus simple de lancer Camunda est d'utiliser Docker. D'autres méthodes de lancement de Camunda sont décrites plus loin dans cet article.

Dans ce cas, il suffit de lancer :
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Vous n'avez pas à vous soucier de Linux, des machines virtuelles Java ou de Tomcat. Les Dockerfiles et la documentation principale (par exemple, les instructions pour se connecter aux bases de données appropriées) sont disponibles sur .
Si vous souhaitez lancer Camunda Enterprise Edition, vous pouvez facilement modifier .
Cependant, le lancement de Camunda avec Docker présente un inconvénient : vous obtiendrez une version de Tomcat qui n'inclut pas toujours les derniers correctifs. Pour contourner cela, vous pouvez créer vous-même une image Docker basée sur la distribution Tomcat souhaitée, comme indiqué dans cet exemple, ou utiliser l'une des solutions décrites ci-dessous.
Déploiement du modèle de processus
Examinons un exemple en utilisant le modèle Saga pour la réservation classique de voyages, où vous souhaitez appeler trois actions consécutives et correctement compenser les actions réussies en cas d'échec ultérieur. Présenté sous forme de BPMN, cela ressemble à ceci :

Vous pouvez désormais utiliser . Supposons que vous l'ayez enregistré sous le nom trip.bpmn et que vous ayez lancé Camunda via Docker pour qu'il soit accessible sur localhost : 8080 :
curl -w "n"
-H "Accept: application/json"
-F "deployment-name=trip"
-F "enable-duplicate-filtering=true"
-F "deploy-changed-only=true"
-F "trip.bpmn=@trip.bpmn"
http://localhost:8080/engine-rest/deployment/creat
Vous pouvez maintenant démarrer à l'aide de l'API REST et transmettre les données que vous souhaitez voir comme variables de l'exemplaire du processus :
curl
-H "Content-Type: application/json"
-X POST
-d '{"variables":{"someData" : {"value" : "someValue", "type": "String"}},"businessKey" : "12345"}}'
http://localhost:8080/engine-rest/process-definition/key/FlowingTripBookingSaga/start
Une autre question intéressante : comment Camunda appelle-t-elle des procédures telles que la réservation de voitures ? Camunda peut non seulement appeler immédiatement des services (principe Push), en utilisant certains connecteurs intégrés , mais également placer des éléments de travail dans un type de file d'attente intégrée. Ensuite, le worker peut récupérer les éléments de travail via REST, effectuer la tâche et informer Camunda de l'achèvement (principe Pull).

Ainsi, la première étape consiste à exécuter (car d'autres workers peuvent récupérer des tâches en même temps pour faire évoluer le système) :
curl
-H "Content-Type: application/json"
-X POST
-d '{"workerId":"worker123","maxTasks":1,"usePriority":true,"topics":[{"topicName": "reserve-car"}, "lockDuration": 10000, "variables": ["someData"]}]}'
http://localhost:8080/engine-rest/external-task/fetchAndLock
Ensuite, informez Camunda que (notez que vous devez saisir l'identifiant de la tâche externe reçu dans la première requête) :
curl
-H "Content-Type: application/json"
-X POST
-d '{"workerId":"worker123", "variables": {}}'
http://localhost:8080/engine-rest/external-task/EXTERNAL_TASK_ID/complete
Voilà, vous n'avez toujours pas eu besoin de Java, n'est-ce pas ? Et c'est suffisant pour commencer !
Bibliothèques clientes
Appeler l'API REST est facile dans n'importe quel langage de programmation. En JavaScript, il est pratique de le faire avec JQuery, et en C#, d'utiliser System.Net.Http et Newtonsoft.Json. Mais cela prendra du temps. Vous pouvez donc simplement utiliser une bibliothèque cliente.
Actuellement, plusieurs bibliothèques clientes prêtes à l'emploi sont disponibles :
- JavaScript: . Camunda est pris en charge ;
- Java : . Camunda est pris en charge ;
- C# : et . Ces deux projets sont en état intermédiaire et pratiquement inactifs, mais peuvent servir de bon point de départ ;
- PHP : — bibliothèque pas très complète et ne comprenant pas les dernières modifications de l'API, mais je connais des projets qui l'utilisent.
À l'exception de JavaScript et de Java, les bibliothèques clientes ne font pas partie du produit Camunda lui-même. Ne vous attendez pas à ce qu'elles prennent en charge toutes les fonctionnalités de l'API REST de Camunda. Si une bibliothèque ne fournit pas une fonctionnalité particulière, cela ne signifie pas qu'elle n'existe pas, vérifiez toujours l'API REST de Camunda. Les projets standards utilisent les bibliothèques comme point de départ et modèle.
Exemple avec C#
En utilisant la bibliothèque cliente mentionnée ci-dessus, nous pouvons simplement écrire :
var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
// Déployer le fichier XML BPMN à partir des ressources
camunda.RepositoryService.Deploy("trip-booking", new ListLe code source fonctionnel complet peut être trouvé sur Internet : . Un autre exemple est disponible à l'adresse .
Пример с Node.js
var Workers = require('camunda-worker-node');
var workers = Workers('http://localhost:8080/engine-rest', {
workerId: 'some-worker-id'
});
workers.registerWorker('reserve-car', [ 'someData' ], function(context, callback) {
var someNewData = context.variables.someData + " - ajout de quelque chose";
callback(null, {
variables: {
someNewData: someNewData
}
});
});
workers.shutdown();
Vous pouvez trouver plus d'informations sur le site Web
Méthodes alternatives pour démarrer Camunda
Image Docker personnalisée avec « Camunda standalone WAR »
En alternative à l'image Docker prête à l'emploi de Camunda, vous pouvez préparer Tomcat vous-même (par exemple, à partir des images Docker officielles de Tomcat) et ensuite y copier Camunda en tant qu'un des fichiers WAR.

Si vous avez de nombreuses exigences supplémentaires et que vous pouvez configurer l'environnement de construction Java, vous pouvez également configurer Camunda Standalone WAR. Configurez la construction Maven comme dans ces exemples : construction ou construction .
Démarrer la distribution Camunda Tomcat
Une autre option est simplement de télécharger la distribution Camunda Tomcat, de la décompresser et de la lancer. Pour cela, vous n'aurez besoin que de l'environnement d'exécution Java (JRE) installé sur votre ordinateur. Vous pouvez facilement .

Pour modifier la base de données ou faire autre chose, vous devez configurer Tomcat comme . Je sais que Tomcat peut sembler complexe, mais en réalité, c'est très simple. Et Google connaît les réponses à toutes les questions que vous pourriez avoir pendant le processus.
Démarrer Camunda avec Tomcat
La dernière alternative est de configurer Tomcat vous-même et d'y installer Camunda, . Cela vous permettra d'utiliser n'importe quelle version de Tomcat que vous préférez, ou par exemple, de l'installer comme un service Windows.
Démarrer Camunda en production
En général, il sera nécessaire d'effectuer quelques réglages finaux pour démarrer Camunda. Dans Camunda, il existe des recommandations qui décrivent cela en détail, mais je ne vais pas les aborder dans cet article — je vais simplement mentionner un exemple : l'API REST de la distribution par défaut n'est pas configurée pour l'authentification. Vous voudrez peut-être modifier cela.
Conclusion
Comme vous avez pu le remarquer, commencer à travailler avec Camunda est très simple, quelle que soit la langue que vous utilisez. L'élément clé est que toutes les interactions se font via l'API REST. L'installation est également assez simple, surtout si vous utilisez Docker.
Source : habr.com
