Developpez.com - Rubrique ALM

Le Club des Développeurs et IT Pro

Apprendre à développer une application basée sur une architecture microservices avec Docker

Un tutoriel de Mickael Baron

Le 2016-03-24 16:01:03, par Mickael Baron, Rédacteur
Bonjour,

Je vous propose un tutoriel sous la forme d'exercices afin d'apprendre à construire une application en respectant une architecture à base de microservices. Nous utiliserons pour cela plusieurs technologies : la bibliothèque KumuluzEE pour packager et exécuter une application Java EE en ligne de commande, l'outil Docker pour l'isolation des microservices, la bibliothèque et le serveur RabbitMQ pour la gestion d'un bus d'événements afin que les microservices communiquent de manière asynchrone et finalement, l'outil Docker Compose pour la composition des microservices.

La grande majorité du code contenu dans les microservices vous sera donnée comme support. En effet, ces exercices se focaliseront principalement sur les problématiques de déploiement.

L'adresse du tutoriel est la suivante : http://mbaron.developpez.com/tutorie...cation-docker/

Profitez de cet espace pour donner vos impressions ou poser vos questions.

Mickael
  Discussion forum
8 commentaires
  • Benoid
    Candidat au Club
    Merci pour ce petit tutoriel fort sympathique et très bien fait qui permet de découvrir les architectures microservices mais également de nombreuses autres techno.

    Je me permets de relever une petite coquille dans le chapitre "V-C. Étapes à suivre", la variable d'environnement à définir est REDISALIAS_PORT et non REDISALIAS_HOST.
  • Mickael Baron
    Rédacteur
    Salut,

    Merci pour le retour positif.

    Je viens de corriger. Un résidu d'une ancienne version.

    Mickael
  • Mickael Baron
    Rédacteur
    Bonjour,

    Dans le premier cas, vision "Développement", le port du conteneur Redis a été exposé afin de pouvoir tester son code Java avec le serveur Redis. Cela se passe comme si Redis avait été installé sans Docker.

    Dans le second cas, c'est plus une vision Production. Dans une architecture microservice, il faut pouvoir isoler les services. C'est la raison d'avoir créé un sous-réseau helloworldnetwork. Tous les conteneurs appartenant à ce sous réseau peuvent communiquer entre eux. Par conséquent, plus besoin d'exposer le port 6379 puisque le conteneur Java et le conteneur Redis font partie du même sous réseau. Par ailleurs, est-ce qu'il y a une utilité d'exposer le port 6379 en production, la réponse est non.

    Mickael
  • aillet
    Nouveau Candidat au Club
    Bonjour,

    dans les sources du projet, la classe JedisFactory n'est pas en phase avec votre tutoriel. La classe semble manipuler une variable d'environnement "REDIS_HOST" dans les sources et votre tutoriel parle de la variable d'environnement "REDISALIAS_PORT", ce qui permet juste de choisir l'adresse IP du Redis et non son numéro de port.

    Code Java :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	... 
            private static final String REDIS_HOST_ENV_KEY = "REDIS_HOST"; 
            ... 
    	private String getRedisHost() { 
    		String redisHost = System.getenv(REDIS_HOST_ENV_KEY); 
    		if (redisHost == null || redisHost.isEmpty()) { 
    			return "localhost"; 
     		} else { 
     			return redisHost; 
     		} 
    	} 
            ...

    De ce fait, on ne peut renseigner le numéro du port Redis et l’exécution du tutoriel génère une erreur de connexion.

    aillet
  • Mickael Baron
    Rédacteur
    Salut,

    Merci

    Je n'avais impacté la solution.

    Les sources à jour sont sur mon github (voir lien en bas du tutoriel)

    Mickael
  • jfmauro
    Nouveau Candidat au Club
    Bonjour,

    D'abord merci pour votre cours.

    A l'étape 3, la création du conteneur redis se fait comme suit en utilisant le port 6379 et ce pour assurer la communication entre ce projet (pas encore isolé dans un conteneur Docker) et le microservice Redis la solution est de rediriger le port 6379 de l'hôte vers le port 6379 du conteneur (le port par défaut de Redis).

    Code :
    docker run --name redis -v $(pwd)/data:/data -p 6379:6379 -d redis redis-server --appendonly yes

    À l'étape 6, la création du conteneur redis se fait sans mentionner de port :

    Code :
    docker run --name redis -d --network helloworldnetwork -v $(pwd)/data:/data redis redis-server --appendonly yes

    Pourriez-vous m'expliquer pourquoi?

    D'avance merci.

    JF
  • ulrich99
    Candidat au Club
    salut, s'il vous plait j'ai un problème au niveau de l'exercice 3 ou il faut ajouter une variable d'environnement. je ne sais pas comment le faire.
    je serais ravis si vous pouvez m'aider.
  • Mickael Baron
    Rédacteur
    Bonjour,

    Sous Eclipse, depuis la configuration d'exécution il y a un onglet Environment. Voir capture d'écran