{"id":23564675,"url":"https://github.com/mickaelbaron/microservices-docker-java-tutorial","last_synced_at":"2025-10-03T20:20:04.152Z","repository":{"id":39960453,"uuid":"163682402","full_name":"mickaelbaron/microservices-docker-java-tutorial","owner":"mickaelbaron","description":"L'objectif de cette série d'exercices est d'apprendre à construire une application en respectant une architecture à base de microservices en se focalisant sur le langage Java.","archived":false,"fork":false,"pushed_at":"2024-09-18T14:23:49.000Z","size":1498,"stargazers_count":14,"open_issues_count":0,"forks_count":20,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-30T16:19:28.976Z","etag":null,"topics":["architectures-microservices","docker","docker-compose","java","microprofile","microservice","microservices"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mickaelbaron.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-12-31T16:18:15.000Z","updated_at":"2025-03-04T22:18:06.000Z","dependencies_parsed_at":"2023-02-09T16:16:32.951Z","dependency_job_id":"8b8e2cf3-287c-4749-bba8-e5ad328259c4","html_url":"https://github.com/mickaelbaron/microservices-docker-java-tutorial","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mickaelbaron/microservices-docker-java-tutorial","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickaelbaron%2Fmicroservices-docker-java-tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickaelbaron%2Fmicroservices-docker-java-tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickaelbaron%2Fmicroservices-docker-java-tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickaelbaron%2Fmicroservices-docker-java-tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mickaelbaron","download_url":"https://codeload.github.com/mickaelbaron/microservices-docker-java-tutorial/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickaelbaron%2Fmicroservices-docker-java-tutorial/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278220624,"owners_count":25950501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-03T02:00:06.070Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["architectures-microservices","docker","docker-compose","java","microprofile","microservice","microservices"],"created_at":"2024-12-26T17:17:13.357Z","updated_at":"2025-10-03T20:20:04.126Z","avatar_url":"https://github.com/mickaelbaron.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tutoriel Microservices avec Docker - Développement avec le langage Java\n\nL'objectif de cette série d'exercices est d'apprendre à construire une application en respectant une architecture à base de microservices en se focalisant sur le langage Java.\n\nPlusieurs technologies seront utilisées :\n\n- le framework [Open Liberty](https://openliberty.io/) pour packager et exécuter une application microservice respectant la spécification [MicroProfile](https://microprofile.io/) ;\n- l'outil [Docker](https://www.docker.com/) pour l'isolation des microservices ;\n- la bibliothèque et le serveur [RabbitMQ](https://www.rabbitmq.com/) pour la gestion d'un bus d'événements/messages afin que les microservices communiquent de manière asyncrhone ;\n- l'outil [Docker Compose](https://docs.docker.com/compose/) pour la composition des microservices.\n\nLa grande majorité du code contenu dans les microservices vous sera donné comme support dans le répertoire _workspace_. En effet, ces exercices se focaliseront principalement sur les problématiques de déploiement et non sur l'aspect développement.\n\nDans la suite, on appelle « microservice », un programme qui implémente une fonctionnalité dans un langage donné (par exemple Java) et est isolé dans un conteneur.\n\n**Buts pédagogiques** : développer un microservice avec le langage Java et la spécification [MicroProfile](https://microprofile.io/), télécharger une image Docker, créer une image, créer un conteneur, faire communiquer plusieurs conteneurs, mettre en place un bus d'événements, composer des microservices avec [Docker Compose](https://docs.docker.com/compose/).\n\n\u003e Ce dépôt est utilisé dans le cadre d'un cours sur les architectures orientées services que je dispense à l'[ISAE-ENSMA](https://www.ensma.fr) et à l'[Université de Poitiers](http://www.univ-poitiers.fr/) en français. Tous les supports de cours et tutoriaux sont disponibles sur mon blog personnel : \u003chttps://mickael-baron.fr/soa/\u003e.\n\n## Prérequis logiciels\n\nAvant de démarrer cette série d'exercices, veuillez préparer votre environnement de développement en installant les outils suivants :\n\n- [Java via OpenJDK](https://jdk.java.net/ \"Java\") ;\n- [Maven](https://maven.apache.org/ \"Maven\") ;\n- [VSCode](https://code.visualstudio.com/ \"Visual Studio Code\") et le [pack d'extension pour Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack \"Extension Pack for Java\") ;\n- [cURL](https://curl.haxx.se \"cURL\") ;\n- [Docker et Docker Compose](https://www.docker.com/ \"Docker\").\n\n## Présentation de l'étude de cas\n\nL'étude de cas utilisée est une application permettant de diffuser des messages « HelloWorld ». Elle fournit une interface web pour la saisie et pour la consultation des messages (voir figure ci-dessous).\n\n![Application HelloWorld](./images/helloworldapplication.png \"Application HelloWorld\")\n\nSur le schéma proposé sur la figure ci-dessous, nous détaillons la décomposition en microservices de cette application. L'architecture dispose de sept microservices.\n\n- Le microservice **Web** (contenu dans le projet _helloworldwebmicroservice_) fournit à l'utilisateur une interface web. La technologie utilisée sera du HTML/JavaScript et [Vue.js](https://vuejs.org/) pour le client et NodeJS pour le serveur web.\n- Le microservice **Rest** (contenu dans le projet _helloworldrestmicroservice_) a pour rôle de fournir une API de type service web pour le microservice **Web**. Lors de la réception d'un message « HelloWorld » celui-ci est envoyé au microservice **Redis** à des fins de stockage. Il publie également un événement vers le microservice **RabbitMQ**.\n- Le microservice **Redis** fournit un serveur [Redis](https://redis.io/) pour le stockage des messages « HelloWorld ».\n- Le microservice **RabbitMQ** fournit un bus d'événements de type AMQP basé sur l'implémentation [RabbitMQ](https://www.rabbitmq.com/).\n- Le microservice **Log** (contenu dans le projet _helloworldlogmicroservice_) s'abonne au bus d'événement et affiche sur la sortie console les événements envoyés.\n- Les microservices **Email** et **LLM** (une IA générative) s'abonnent au bus d'événement et envoient un email ou délègue à un agent d'une IA générative pour réaliser une tâche précise. Ces deux microservices ne seront pas traités dans ces exercices. \n\n![Schéma de l'Application HelloWorld](./images/helloworldapplicationschema.png \"Schéma de l'Application HelloWorld\")\n\n## Ressources\n\nRetrouver les précédentes leçons :\n\n- [Tutoriel sur SOAP-UI pour inspecter et invoquer un service web étendus/SOAP via l'outil SOAP-UI](https://github.com/mickaelbaron/soapui-tutorial) ;\n- [Tutoriel sur JAX-WS pour implémenter des services web étendus/SOAP](https://github.com/mickaelbaron/jaxws-tutorial) ;\n- [Tutoriel sur JAX-RS pour implémenter des services web REST](https://github.com/mickaelbaron/jaxrs-tutorial) ;\n- [Tutoriel sur le développement de WebSocket et de Server-Sent Event avec le langage Java et les bibliothèques JAX-RS et Tyrus](https://github.com/mickaelbaron/streaminghttp-tutorial).\n\nPour aller plus loin, vous pouvez consulter les ressources suivantes :\n\n- [Support de cours SOA](https://mickael-baron.fr/soa/introduction-soa \"Support de cours SOA\") ;\n- [Support de cours WSDL](https://mickael-baron.fr/soa/decrire-configurer-wsdl \"Support de cours WSDL\") ;\n- [Support de cours SOAP](https://mickael-baron.fr/soa/communiquer-soap \"Support de cours SOAP\") ;\n- [Support de cours JAX-WS](https://mickael-baron.fr/soa/developper-serviceweb-jaxws \"Support de cours JAX-WS\").\n- [Support de cours REST](https://mickael-baron.fr/soa/comprendre-style-architecture-rest \"Support de cours REST\") ;\n- [Support de cours JAX-RS](https://mickael-baron.fr/soa/developper-serviceweb-rest-jaxrs \"Support de cours JAX-RS\") ;\n- [Support de cours sur le Streaming HTTP](https://mickael-baron.fr/soa/introduction-streaminghttp) ;\n- [Support de cours sur la mise en œuvre de technologies de Streaming HTTP avec le langage Java](https://mickael-baron.fr/soa/streaminghttp-mise-en-oeuvre) ;\n- [Support de cours sur une introduction aux architectures microservices](https://mickael-baron.fr/soa/introduction-microservices \"Support de cours sur une introduction aux architectures microservices\") ;\n- [Support de cours sur les outils et bibliothèques pour la mise en œuvre d'architectures microservices](https://mickael-baron.fr/soa/microservices-mise-en-oeuvre \"Support de cours sur les outils et bibliothèques pour la mise en œuvre d'architectures microservices\").\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmickaelbaron%2Fmicroservices-docker-java-tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmickaelbaron%2Fmicroservices-docker-java-tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmickaelbaron%2Fmicroservices-docker-java-tutorial/lists"}