Message-Driven --Spring Nuage flux

Avant d'entrer dans le sujet, imaginons un scénario. Il y a deux personnes dans la conversation, l'un d'entre eux posé une autre question, cette question que simple, prendre du temps pour arriver à la bonne réponse. La question est donc, poser des questions du parti, avant que les autres réponses, comment feriez-vous? Cela a été fait là-bas pour, ou faire autre question devra faire une chose, comme la punaise patron compte seulement résolu aujourd'hui hier, attendre que les autres réponses, puis continuer la conversation, ou faire d'autres en fonction du contenu de la réponse. Si elle était moi, je choisirais la deuxième (je suis toujours très dévoué), bien sûr, si l'autre côté est beau, je ne me dérange pas assis devant elle apprécie la façon dont elle a pensé (ha ha, exposée accidentellement).

Le scénario ci-dessus envisagé but, ne pas essayer d'expliquer à quel point je consacre (la faim), je voudrais dire est: notre interaction avec le monde n'est pas synchrone, linéaire, strictement conforme à la question - modèle de réponse de conduite, et est un message axé sur, l'envoi d'informations en permanence et de réception. Lorsque le travail principal que nous avons reçu le message, répondra à ces messages, bien sûr, nous avons aussi souvent interrompu en cours d'exécution.

Ce tutoriel présentera comment concevoir et mettre en uvre, par le service micro de messagerie asynchrone pour interagir entre eux et avec d'autres micro-services. Utilisation de messages asynchrones entre les applications communiquent entre eux ne sont pas un nouveau concept, le nouveau concept est de changer l'utilisation pour transmettre des messages à l'état de l'événement --Event Driven Architecture (EDA), qui est l'architecture événementielle, également appelé message Driven Architecture (MDA) , l'architecture message-driven. Basé sur une architecture événementielle, nous pouvons construire des systèmes très découplés doivent communiquer entre eux sans le service couplé étroitement ensemble dans une bibliothèque spécifique ou d'autres services. Lorsqu'il est combiné avec des micro-services, nous les problèmes d'application du moniteur de service laissez simplement des événements (messages) un flux correspondant à l'événement de réponse est reçu (le message), vous pouvez ajouter rapidement de nouvelles fonctionnalités à l'application.

Printemps Nuage Nuage Printemps sous-projet Stream, faire le développement d'applications géré par message en fonction de plus facile, l'utiliser, nous pouvons facilement être en mesure d'atteindre, « le communiqué de nouvelles et de la consommation » et aurait la plate-forme de messagerie sous-jacente (ci-après nous présenterons les détails de mise en uvre) services de protection (y compris les éditeurs et les consommateurs).

Messagerie, architecture événementielle et service de micro

Dans l'application des services à base de microprocesseur, l'état de la livraison de message Pourquoi si important? Pour répondre à cette question, nous allons utiliser tout au long de ce tutoriel sont liés aux deux services --license et des services d'organisation. Imaginez, lorsque ces services sont déployés dans un environnement de production, trouver des informations de licence dans une organisation de services pour obtenir l'accès à l'organisation du service quand il prend beaucoup de temps. Heureusement, nous avons trouvé les habitudes d'utilisation des données d'organisation sont: l'organisation des données change rarement, et utilise la clé principale pour obtenir des données provenant des services de l'organisation. Par conséquent, l'organisation a acquis des services de données mises en cache, de sorte que nous pouvons réduire considérablement le temps de réponse lorsque licence (licence pour obtenir les données nécessaires pour obtenir les données d'organisation organizationId correspondant) d'accès aux services.

Lorsque vous utilisez l'outil de mise en cache des solutions qui nécessitent une attention particulière sont de trois ordres:

  • Nous devons nous assurer que toutes les instances de la licence de service pour obtenir des données mises en cache cohérente. Cela signifie que les données ne peuvent pas être mises en cache au service de licence chaque fois, parce que nous devons faire en sorte que, peu importe quelle instance pour obtenir les données, nous devons nous assurer l'organisation est compatible avec les données renvoyées.
  • les données de l'organisation ne peuvent pas être mises en cache dans le conteneur de service de licence géré mémoire. ressources conteneurs de services hébergés sont généralement limités, et la mise en cache locale introduit une plus grande complexité, en raison de la nécessité de veiller à ce que les instances de service de cache autre cache local du cluster sont synchronisées.
  • Quand une organisation étatique qui change d'enregistrement de données, telles que la mise à jour ou la suppression, le service de licence est nécessaire pour confirmer l'organisation du service a subi des changements. Ensuite, l'organisation des services de licence nécessaire aux données du cache modifié ou mis à jour est invalide et supprimé du cache.
  • Pour les trois points ci-dessus dit, ont maintenant deux solutions. La première, en utilisant la synchronisation « demande - réponse mode »; état de changement lorsque la licence organisation de données de point final changé, organisation et services communiquent dans les deux sens par leurs extrémités de repos respectives, tels que l'organisation du service de notification d'appel de l'organisation de la licence d'un statut de licence vous devez faire de l'autre côté du traitement du cache, la licence a traité les services d'organisation de réponse. La seconde, l'organisation a changé après le service de données, le service d'organisation de ce changement envoyé par les événements asynchrones (messages), autrement dit, l'organisation d'une organisation de services enregistre la survenance de l'incident à une publication des changements file d'attente alors que le service de licence a écouté la plate-forme de messagerie, l'écoute de la file d'attente quand il y a un nouvel événement (des changements de données de l'organisation d'événements) après cet événement, la « consommation », qui est de rendre le traitement du cache correspondant - mise à jour ou changement De plus. Le plus décrit ci-dessous les détails de mise en uvre de ces deux programmes.

    Synchronisation « demande - réponse » modèle

    Pour l'organisation de cache de données, nous utilisons la base de données pour stocker Redis. Redis est une paire clé-valeur distribuée pour former une base de données pour stocker des données. La figure suivante illustre comment le - mode « demande une réponse » pour obtenir cache.

    La figure ci-dessus, lorsqu'un utilisateur demande une licence de services, les services de licence doivent également interroger l'organisation d'acquisition de données. service de licence obtenir l'organisation de priorité Id selon les données des Redis du cluster, sinon trouvé, l'organisation du service sera sous licence le service envoie une requête pour obtenir le droit de revenir après les résultats, avant que l'utilisateur est retourné aux données de licence, les données de licence stockées dans l'organisation de services sera Redis en. À ce stade, si quelqu'un mis à jour par une organisation ou d'une organisation de suppression des enregistrements terminaux, le service d'organisation après l'achèvement de la logique métier, vous avez également besoin d'une licence de service d'accès, informent les dossiers d'organisation correspondants ont été invalides, ont besoin d'être mis à jour ou supprimé du cache. Cette étape, il y a au moins trois problèmes / risques:

  • organisation et service de licence très couplés.
  • Cette interaction couplage entre la flexibilité du service deviendra vulnérable. Si la licence du fournisseur de services pour mettre à jour le cache des changements de point de terminaison, l'organisation des services doit également changer avec lui.
  • Cette solution est très flexible. Parce que nous ne pouvons, sans modifier le code source de l'organisation des services, à cet événement « Modification des données d'organisation » pour ajouter un nouveau client, l'organisation qui est, lorsque les changements de données, d'autres services ont également fait la logique métier correspondant.
  • Ce qui suit décrit la 3h00 pour une analyse ultérieure.

    Haut degré de couplage entre les services

    Dans la figure précédente, on peut voir le couplage étroit entre la licence et l'organisation des services. les services de licence dépendent de l'organisation de services pour obtenir des données. En outre, lorsque l'enregistrement a eu lieu après l'organisation du changement, des services d'organisation licence de services d'accès également besoin, un avis organisation de cache qui a échoué, de sorte que les besoins d'organisation des services de licence un point de terminaison de service exposé à accomplir cette demande, donc en conséquence, les services d'organisation sont également couplées avec le service de licence. Bien sûr, il y a une autre approche, Redis services d'organisation d'interaction serveur directement et services de licence, de sorte qu'un dossier d'échec Redis.

    Toutefois, la licence serveur Services d'organisation de services Redis directement et l'interaction de cette approche dans le micro-environnement du service lui-même est un grand tabou. Bien sûr, quelqu'un contestera certainement que: les données dans le cache lui-même est une partie des services de l'organisation, le service de licence que dans un contexte particulier, ou les utiliser pour créer une entreprise autour de ces données. Mais laissez les données d'organisation de services licence directement les services Redis dans le traitement organisation des services dépendra de la licence Redis services, mais aussi facile à briser le service de licence a établi des règles pour atteindre.

    Services deviennent vulnérables

    Haut degré de couplage sera une licence et l'organisation de services de ces deux services deviennent plus fragiles. Si le service de suspendre la licence ou la dégradation des performances, l'organisation des services sera également affectée, parce que l'organisation des services doit maintenant interagir directement avec le service de licence qui dépend du service de licence.

    Ajout organisation de service à la clientèle n'est pas flexible

    S'il y a un autre service a également besoin de « écouter » pour changer l'organisation des données, vous devez ajouter une logique d'appel de service à distance pour ce service dans l'organisation. Cela signifie que l'organisation doit ajouter un nouveau code et recompiler, déploiera. Pensez-y, si à l'avenir il existe plusieurs services (organisation de consommateurs exige des événements de modification de données), et même de nombreux services d'organisation similaires et des services de licence tels groupes de services hautement couplés entre eux, et synchrone « demande - réponse mode », « tissage » la performance au sein des services d'application commencera. Enfin, vous trouverez que cette application échoue, ce compte « net » pour un poids lourd.

    Interagir en utilisant les services de messagerie entre

    L'utilisation d'un système de passage de messages, une file d'attente de messages sera introduit entre les services de licence et de l'organisation des services. La file d'attente ne sert pas à récupérer les données d'une organisation de service, mais quand l'organisation a changé service de données, vous pouvez publier les nouvelles à la file d'attente. La figure ci-dessous illustre les détails:

    La figure montre le modèle de données a changé chaque organisation, organisation de services publieront des informations à la file d'attente. La licence a été à l'écoute des données de la file d'attente de messages de changement de l'organisation lorsqu'il trouve dans un nouveau message publié immédiatement la consommation, que la mise en uvre de la logique correspondante en fonction du contenu des messages, tels que la mise à jour du cache ou l'échec direct. Dans ce mode, la file d'attente de messages joue le rôle d'un intermédiaire dans les services de licence et d'organisation de services qui a été mentionné précédemment « plate-forme de messagerie sous-jacente. » Ce modèle peut apporter de nombreux avantages, il peut se résumer comme les quatre points suivants:

    • couplage faible
    • persistance
    • haute Extensibilité
    • Une grande flexibilité

    couplage faible

    Une application micro-service peut être composé de nombreux petits, la composition des services décentralisés, la plupart ont besoin d'interagir avec d'autres services entre ces services, et éventuellement d'autres la gestion des services de données « intéressantes ». Mentionné précédemment de manière synchrone à l'aide de l'organisation réponse HTTP synchrone et sera sous licence deux services ont une grande dépendance les uns des autres. Bien que nous ne pouvons pas éliminer complètement cette dépendance, mais cette dépendance peut être réduite dans la mesure du possible, ne servent qu'à exposer directement leurs points de terminaison gérer propres données. Un message modèle qui passe peut découpler les dépendances entre les deux services, en raison de l'organisation des services, lorsque le changement état des besoins de données des messages à publier, relâchez simplement le message à la file d'attente de messages, tandis que pour le service de licence, est seul responsable consommateur de messages, qui ne se soucie pas de la sortie de nouvelles.

    persistance

    file d'attente de messages, il peut faire en sorte que le message sera transmis, même si les services de consommation ont été suspendus. En d'autres termes, même si le service de licence a été indisponible, les services d'organisation peuvent encore envoyer des messages à la file d'attente de messages. Ces messages seront stockés dans la file d'attente de messages jusqu'à ce permis avant de commencer la consommation de ces services sont disponibles pour accumuler beaucoup de nouvelles. En revanche, le cache de liaison et la file d'attente le message, bloquer lorsque l'organisation du service, se dégrade de service de licence gracieusement, au moins une partie de l'organisation du cache des données dans la licence et les services. Parfois, les données obsolètes est plus forte que l'absence de données.

    haute Extensibilité

    Car après les nouvelles sortie sur sera stockée dans la file d'attente de messages, de sorte que les éditeurs ne ont pas besoin d'attendre un message de réponse prudent retourné après les consommateurs de dépenses, afin qu'ils puissent continuer leur travail. De même, le plus tôt possible, il a été incapable de lire les messages de la file d'attente lorsqu'un côté des dépenses de consommation (par exemple), vous pouvez commencer à plus de services à la consommation pour gérer le message « trop-plein ». Le mécanisme d'extension traditionnel est d'augmenter le nombre de threads que les messages de processus, de sorte que le consommateur sera suffisant en mesure de traiter. Malheureusement, l'utilisation de cette approche, la performance dernière de traitement des messages de consommation sera limité par le nombre de curs de processeurs, a annoncé lorsque la fréquence des services a augmenté à nouveau, processus familier ne peut pas répondre à la demande, en fin de compte, à la performance en déployant machine plus puissante. Et en lançant plus des exemples de consommation de cette méthode hautement évolutive est idéale pour le modèle micro-services, parce que plus d'un exemple des micro-services commencent à forte performance par rapport à la machine est négligeable, après toutes ces micro services en passant déployés sur une machine ordinaire sera en mesure de bien fonctionner.

    Une grande flexibilité

    un message éditeurs ne sait pas qui sont ces messages au consommateur, ce qui signifie que vous pouvez facilement ajouter de nouveaux consommateurs de nouvelles, il est important que l'éditeur n'a aucun effet sur le message. Ceci est un avantage très fort, comme il est tout à fait possible dans le cas d'applications a ajouté de nouvelles fonctionnalités à la micro-service, il ne déroge pas aux autres micro-services existants. Il suffit d'écouter les événements d'édition de services nouvellement ajoutés et y répondre.

    Ruisseau, Nuage, Printemps

    Printemps-Cloud Stream peut facilement mettre en uvre le modèle de messagerie aux applications de service à base de micro-printemps. Nuage Printemps sous-projets Ruisseau site officiel https://cloud.spring.io/spring-cloud-stream/. Printemps-Cloud Stream est un cadre axée sur l'annotation, de sorte que vous pouvez utiliser quelques annotations simples seront en mesure de construire les éditeurs et les consommateurs d'information dans l'application.

    Printemps-Cloud Stream soutiendra également nos détails de mise en uvre de la plate-forme de messagerie de l'abstrait, printemps nuage ne fournissent que des interfaces indépendantes de la plateforme. Cela signifie que la plate-forme de messagerie a sorti les détails de mise en uvre détaillée du code d'application, puis utiliser la plate-forme a atteint la messagerie, les plates-formes de messagerie de soutien cloud Spring Stream, y compris Apache Kafka et RabbitMQ, de cette façon, les applications peuvent être directement interface conviviale plate-forme indépendante spécifique communiqué de nouvelles du printemps et de la consommation (dans ce tutoriel va utiliser le bus de messagerie RabbitMQ sont introduits, parce que je ne sais pas comment Kafka familier, embarrassant).

    Pour comprendre printemps-Cloud Stream, nous avons d'abord l'architecture flux nuage printemps sont introduits et se familiariser avec le sens du printemps Nuage termes liés à la vapeur. Si ceci est votre premier contact avec la plate-forme de messagerie, a frappé un coup de feu, la prochaine chose implique la courbe d'apprentissage peut être un peu difficile.

    Architecture ruisseau, Nuage, Printemps

    Tout d'abord, nous supposons que les deux services d'interagir par messagerie pour introduire Spring-Cloud architecture vapeur. Il est un éditeur de nouvelles, et l'autre est le consommateur de message. Ci-dessous, par transfert flux nuage printemps un message réalisé:

    Architecture ruisseau, Nuage, Printemps

    Printemps-Cloud publier et consommer des messages comporte quatre éléments:

    • source
    • canal
    • liant
    • évier

    source

    Lorsque l'entreprise pré-service de pré-annonce sera complétée par source publie un message sur. Source est une interface d'annotation de printemps qui peuvent être représentatifs du corps de message au message publié objets conduit POJO (canal), un message qui séquence cible avant la libération (en utilisant JSON par défaut).

    canal

    Channel (pipeline nouvelles) est plus abstraite file d'attente de messages, il enregistre le message publié par le producteur ou messages consommateurs message reçu. Nom des pipelines de message est généralement associé à un nom de file d'attente cible. Cependant, au nom de la file d'attente de messages ne soit pas directement exposé au code, le nom sera en face du tuyau utilisé dans le code, alors que disposé dans un fichier de configuration, sélectionnez le message correct pour la file d'attente de messages pour la lecture et l'écriture du pipeline, plutôt que réalisé code.

    liant

    Binder fait partie du cadre ruisseau Nuage Printemps. Il est composé du printemps-Cloud flux est utilisé pour réaliser une plate-forme d'échange de message particulier. Parce que Binder Spring Nuage flux est mis en uvre, il sera en mesure de se rendre compte que nous pouvons publier et consommer des messages sans nécessiter l'exposition de la bibliothèque et API plate-forme de message spécial. Ci-dessous vous verrez sa place puissante.

    évier

    Dans Stream, Nuage, Printemps, après avoir reçu un message de la file d'attente de messages, vous avez besoin d'un évier. Sink peut écouter les messages entrants et le tube de message désérialisé dans un objet POJO. Après cela, le message sera en mesure d'utiliser la logique métier.

    Ce tutoriel est principalement utilisé pour installer RabbitMQ RabbitMQ faire un exemple. En fait, quel que soit RabbitMQ ou Kafka, le code est le même, mais pas la même configuration, il est un peu différent de bits lors de la configuration du middleware de messagerie. Avant d'apprendre les pages suivantes, vous devez installer RabbitMQ local, pour l'installation de RabbitMQ, ici n'est pas donné, l'entrée d'un grand nombre de tutoriels en ligne. S'il vous plaît premier contact avec salle RabbitMQ et chaussures pour enfants en ligne. Remarque besoin eralang installer avant d'installer RabbitMQ.

    Pour la distribution et la consommation un message

    Nous avons déjà introduit plusieurs simples Spring cloud composants flux impliqués, nous allons commencer à écrire un exemple simple du Cloud Spring. Dans cet exemple, nous utiliserons l'organisation des services et la diffusion de l'information licence de service d'information des consommateurs, le service de licence reçoit le message que la plus simple consommateur - journal d'impression dans la console.

    Nouvelles éditeur dans l'organisation pour obtenir un service

    La prochaine fois que nous réaliserons, chaque fois que les données conservées par l'organisation de service changé (ajout, mise à jour ou suppression), l'organisation de services publiera un message à un sujet RabbitMQ, événement de changement de données d'organisation du salon a eu lieu.

    Le message contient l'ID d'organisation annoncé et les données liées à l'événement change les changements de comportement avec les données (ajout, mise à jour ou supprimer).

    fichier pom

    Mettre en uvre l'affichage, la première chose est de commencer à introduire la personne à charge fichier pom nécessaire. la dépendance de départ est très simple, une seule, ajoutez la dépendance suivante dans le service d'organisation de fichiers pom:

    < dépendance > < groupId > org.springframework.cloud < / GroupId > < artifactId > printemps-nuage-démarreur-stream-lapin < / ArtifactId > < / dépendance >

    Les classes de base

    Après l'introduction des besoins dépendants, nous pouvons ses muscles. Show Time!

    D'abord, regardez plusieurs classes ou interfaces à la fin du message de libération à créer, comme indiqué ci-dessous:

    Une interface qui contient deux classes pour voir leur nom peut probablement deviner les rôles respectifs. look Let au code source spécifique:

    Catégories: OrgChangeModel

    public class {OrgChangeModel privé type de chaîne; privé action des cordes; private String organizationId; private String correlationId; OrgChangeModel publique () {} OrgChangeModel publique (type String action String, String organizationId, String correlationId) { super (); this.type = Type; this.action = Action; this.organizationId = organizationId; this.correlationId = correlationId; } public String getType () { Type de retour; } setType public void (type String) { this.type = Type; } public String getAction () { action pour le retour; } setAction public void (Action String) { this.action = Action; } public String getOrganizationId () { retourner organizationId; } setOrganizationId public void (String organizationId) { this.organizationId = organizationId; } public String getCorrelationId () { retourner correlationId; } setCorrelationId public void (String correlationId) { this.correlationId = correlationId; } } Si le OrgChangePublisher soigneusement observé code, probablement vous pouvez deviner, en fait, une classe de modèle de message, est un POJO, est utilisé pour transporter les besoins de message à transmettre, autrement dit, le transporteur de messages. En outre, lorsque le modèle est envoyé, il est publié en feuilleton JSON (par défaut).

    OrgChangeSource Interface:

    interface publique OrgChangeSource { @Output ( "orgChangeOutput") MessageChannel sortie (); }

    Interface OrgChangeSource est très simple, et maintenant il n'y a qu'une seule méthode qui renvoie un MessageChannel, mais pas simple est la méthode des commentaires ci-dessus - @ sortie, plus @output annotations, Stream, Nuage, Printemps réalisera automatiquement un MessageChannel de retour (nouvelles le procédé de tuyau) est. De plus, il y a une annotation de la propriété @output --value, le nom retourné par la méthode définie dans le message du pipeline.

    Catégories: OrgChangePublisher

    @EnableBinding (OrgChangeSource.class) public class {OrgChangePublisher statique privé enregistreur de logger final = LoggerFactory.getLogger (OrgChangePublisher.class); @Autowired source OrgChangeSource privée; public void publier (action String, String OrgID) { modèle OrgChangeModel = new OrgChangeModel ( OrgChangeModel.class.getTypeName (), l'action, OrgID, UserContextHolder.getContext () getCorrelationId ()) .; logger.info ( "l'envoi du message rabbitmq {} pour l'organisation Id: {}", action OrgID); . Source.output () send (MessageBuilder.withPayload (modèle) .build ()); } }

    Tout d'abord, vous pouvez voir qu'il ya une classe d'annotations de @EnableBinding ci-dessus, au-dessous est la description d'annotation de document officiel:

    D'après le graphique que vous pouvez voir, @ EnableBinding peut faire une application Spring dans une application Flux Nuage Printemps, les notes peuvent être ajoutées sur un de la classe configuré dans l'application. En outre, l'annotation seulement un attribut de valeur, destiné à recevoir une matrice de classe de classe (en fait, à notre avis Interface), qui comprend un ou plusieurs d'interface de classe de classe, comme ci-dessus OrgChangeSource, ces méthodes peut être liée à un retour composant donné (Channel).

    méthode Consultez ensuite à la logique OrgChangePublisher # publish (). L'un des plus étape cruciale consiste à:

    . Source.output () send (MessageBuilder.withPayload (modèle) .build ());

    Nous savons que la source est injectée dans le printemps pour nous aider à réaliser par exemple Source par Spring Nuage Stream, (notez que seulement @EnableBinding la valeur correspondante source comprend une interface ici OrgChangeSource, Stream, Nuage, Printemps devra savoir pour nous aider à atteindre, si supprimer @EnableBinding notes OrgChangeSource.class, ne pourra pas démarrer avec succès le service), la méthode de sortie () est une méthode d'interface que nous avons définie dans OrgChangeSource, le retour de l'objet est une interface MessageChannel de réalisation, seulement deux méthodes d'envoi. signatures méthode sont les suivants:

    Envoyer booléenne (message < ? >  message); Envoyer booléenne (message < ? >  message, à long délai d'attente);

    Méthode d'envoi du canal # () capable d'envoyer un message dans la Manche. Renvoie true si envoyé avec succès. Cette méthode peut bloquer indéfiniment, selon l'utilisation de la mise en uvre qui. Par conséquent paramètre délai d'attente est la deuxième méthode pour contrôler la période de temporisation. Méthode d'envoi lors de l'envoi d'un fil de message sera bloqué jusqu'à ce que le message est envoyé avec succès ou n'a pas envoyé un délai d'attente.

    Le message par défaut est le constructeur MessageBuilder, sa méthode statique un message withPayload () est reçu (charge), nous voulons envoyer, retourne un objet MessageBuilder, objet appelle la méthode build () MessageBuilder pour produire un objet final du message. Enfin, la transmission par la méthode send () à la Manche.

    Nouvelles de presse

    Notre objectif est l'organisation des données est modifiée, par message transmettre ces informations pour informer le service de licence. Ensuite, comment utiliser Publisher pour publier des nouvelles.

    updateOrg modifiée méthode classe OrganizationService () et deleteOrg () comme suit:

    @service public class {OrganizationService @Autowired privé OrganizationRepository orgRepository; @Autowired privé OrgChangePublisher orgChangePublisher; Organisation publique getOrg (String organizationId) { retour orgRepository.findById (organizationId); } ... updateOrg public void (Organisation org) { orgRepository.save (org); orgChangePublisher.publish ( "mise à jour", org.getId ()); } deleteOrg public void (Organisation org) { orgRepository.delete (org.getId ()); orgChangePublisher.publish ( "delete", org.getId ()); } }

    On peut voir dans OrganizationService OrgChangePublisher injecté, puis utiliser la mise à jour () et la méthode de suppression (), qui est, mise à jour ou l'organisation de suppression des dossiers seront couronnés de succès après la sortie de nouvelles est sorti.

    profils

    Lorsque toutes les classes de base pour atteindre, la dernière étape consiste à configurer la relation de liaison entre le type de middleware de messagerie et de son environnement, ainsi que des nouvelles de l'utilisation du pipeline. La configuration est la suivante:

    ressort: ... nuage: flux: liants: rabbitmq: Type: lapin environnement: ressort: rabbitmq: : localhost Port: 5672 nom d'utilisateur: invité Mot de passe: guest fixations: orgChangeOutput: destination: orgChangeTopic Type de contenu: application / JSON liant: rabbitmq

    Peut être vu, la configuration implique deux propriétés principales: spring.cloud.stream.binders et spring.cloud.stream.bindings, ces deux attributs sont définis reçoit une carte et un liant qui peut configurer la pluralité de tuyaux (canal) . classeurs clés La carte est le nom du liant, la nécessité d'utiliser le nom configuration des liaisons; liaison conduit touches est le nom défini, la valeur et la valeur @input @output prend les annotations, telles que la méthode de sortie OrgChangeSource de # () notes @output l'argument de valeur "orgChangeOutput". Signification d'autres propriétés comme indiqué ci-dessous:

    De cette façon, le travail des éditeurs de presse sera achevée, suivie par la réalisation des consommateurs d'information.

    Mettre en uvre les consommateurs de message dans le service de licence

    fichier pom

    De même, le service de licence exige également la mise en place de démarrage dépendance message-driven. Avec les éditeurs de presse se fondent sur l'introduction du même:

    < dépendance > < groupId > org.springframework.cloud < / GroupId > < artifactId > printemps-nuage-démarreur-stream-lapin < / ArtifactId > < / dépendance >

    Les classes de base

    La figure est plusieurs classes ou interfaces dont vous avez besoin pour créer un côté consommateur message:

    Catégories: OrgChangeModel

    OrgChangeModel.java services nécessaires tels que l'organisation, car la licence desservira le message après avoir reçu le contenu du message (modèle) désérialisation, de sorte que la sortie de nouvelles et la fin du consommateur final du modèle de message (modèle) doivent être compatibles. modèle de nouvelles générales sera extrait à une bibliothèque publique, puis le côté édition et du côté des consommateurs que vous pouvez faire référence à la même chose. Voici pas la source est donnée.

    OrgChangeSink Interface

    interface publique OrgChangeSink { @Input ( "orgChangeInput") SubscribableChannel entrée (); }

    Ce qui précède est une seule interface avec la même méthode, et la différence est OrgChangeSource que les annotations sur les méthodes d'interface deviennent @input, mais le principe et @output notes similaires dans le « orgChangeInput » le nom du même canal (pipeline) de. L'interface est également appelée Spring-Cloud Stream atteindre.

    OrgChangeHandler

    @EnableBinding (OrgChangeSink.class) public class {OrgChangeHandler statique privé enregistreur de logger final = LoggerFactory.getLogger (OrgChangeHandler.class); @StreamListener ( "orgChangeInput") public void poignée (modèle OrgChangeModel) { logger.info ( "a reçu un message de type" + model.getType ()); commutateur (model.getAction ()) { cas "get": logger.info ( "Reçu un événement GET du service d'organisation id organisation {}", model.getOrganizationId ()); break; cas « sauver »: logger.info ( "Reçu un événement ENREGISTRER du service d'organisation id organisation {}", model.getOrganizationId ()); break; cas « mise à jour »: logger.info ( "Reçu un événement de mise à jour du service d'organisation id organisation {}", model.getOrganizationId ()); break; cas « supprimer »: logger.info ( "Reçu un événement SUPPRIMER du service d'organisation id organisation {}", model.getOrganizationId ()); break; par défaut: logger.error ( "Reçu un événement INCONNU du service d'organisation de type {}", model.getType ()); break; } } }

    Une fois le message reçu dans une séquence anti-modèle correspondant, vous pouvez utiliser le modèle d'affaires en conséquence. Voici quelques imprimés dans la console. Le développement réel ne serait pas si simple, comme la nécessité d'exploiter la base de données et ainsi de suite.

    En outre il y a une annotation du code source @StreamListener, l'annotation peut être utilisé pour recevoir un tuyau lorsque le tuyau doit surveiller un message entrant, puis la possibilité de recevoir le message désérialisée, la mise en uvre finale du service correspondant, ici une méthode poignée () .

    Du côté des consommateurs du code de base a été mis en place terminée, le dernier besoin aussi de configurer certains attributs nécessaires.

    profils

    La configuration est la suivante:

    ressort: ... nuage: flux: liants: rabbitmq: Type: lapin environnement: ressort: rabbitmq: : localhost Port: 5672 nom d'utilisateur: invité Mot de passe: guest fixations: orgChangeInput: destination: orgChangeTopic Type de contenu: application / JSON groupe: licenseGroup liant: rabbitmq

    Configuration de la grande majorité de la fin de l'éditeur consommateur final est le même, pas le même que lors de la configuration OrgChangInput Channel, et une autre propriété: OrgChangInput.group. En fait, un éditeur de nouvelles peuvent avoir plus de consommateurs de nouvelles, c'est-à-dire, il peut aussi être de service aux auditeurs un événement de nouvelles version de service de l'organisation. La fonction du groupe est d'isoler les différents services, le suivi, indépendamment l'un de l'autre entre les services, si le paquet, puis l'annonce, une seule de ces services peut recevoir et consommation, et, après le regroupement, une copie du message sera ont été envoyés au service d'écouter les messages de tous les événements correspondants dans le pipeline, le dernier message est consommé par une instance du service.

    Publier et consommer nouvelles

    Enfin, démarrer les services d'organisation et de services de licence. Postman est ensuite utilisé pour accéder à http: // localhost: 11000 / v1 / organisations / e254f8c-c442-4ebe-a82a-e2fc1d1ff78a, http méthode PUT, corps de la demande est:

    { "Id": "e254f8c-c442-4ebe-a82a-e2fc1d1ff78a", "Nom": "client-crm-co", "ContactName": "Mark Balster", "ContactEmail": "mark.balster@custcrmco.com", "ContactPhone": "823-555-1213" }

    Ensuite, observer les services d'organisation et console de service de licence, vous pouvez voir une sortie semblable à ce qui suit:

    organisation sortie de la console de service:

    sortie de la console de service de licence:

    Preuve de la signification de la licence reçoit un message publié par l'organisation des services et de la consommation (journal d'impression) a.

    Après Sun Yang a annoncé abandonner la course, au Japon, mais son tir des publicités feu
    Précédent
    Message: Liverpool et l'Inter Ao Liji Suite longueur totale d'environ 70 millions d'euros offre Loukakou
    Prochain
    Un salaire mensuel de 50000, alors quoi? En cela, il suffit à peine pour laver une voiture
    618 nouveaux Raiders de réception complète de téléphone portable: Comment vérifier le téléphone est authentique?
    Il était un examen d'entrée au collège, le Nord a gagné une bourse d'études, mais a couru vers les zones rurales: seulement pour le cur pastoral
    BBC exposer la vérité de l'exercice, vainquit le sens commun: des centaines de millions de personnes sont inutiles exercice
    28 340000 jeune couple a acheté une petite maison de jardin mobiles, amovible amovible peut ranger
    On ne peut que l'entretien régulier comme une voiture, mais aussi ne pas souffrir examen?
    Graphique Java mécanisme de collecte des ordures, très bien écrit
    Fait un modèle de 18 ans, elle a ramassé les feuilles mortes, coudre un nouvel art de haute
    CCTV laissant le couple, la vie idyllique dans la ville, la vie était comme une poétique
    passerelle API d'entrée abandonner
    Si beau! Guy britannique avec quelques paysage chinois, le dynamitage réseau rouge, le monde entier est tombé amoureux de la Chine
    La vérité derrière chilling abus sexuel des enfants, des amis: tolérance zéro entreprise