Ouverture
Cet exemple est basé sur le Springboot intégrant la base de données de mémoire H2, réalisant les tests unitaires et indépendants de la base de données et l'utilisation de RestTemplate pour consommer le service RESTful de Spring Boot.
Dans l'exemple de service RESTful qui utilise RestTemplate pour consommer Spring Boot, nous avons mentionné que lors de l'appel du service Spring Boot, l'URL du service doit être écrite dans le fichier de configuration, mais peu importe laquelle de ces deux méthodes, une fois que l'adresse IP change, le programme doit être modifié et le service est redéployé. Ce problème peut être évité efficacement lors de l'utilisation du ruban.
Préface:
Il existe deux façons d'implémenter l'équilibrage de la charge en douceur, à savoir l'équilibrage de chargement sur le serveur et l'équilibrage de charge sur le client.
Équilibrage de la charge côté serveur: lorsque le navigateur émet une demande à l'arrière-plan, il enverra d'abord une demande au serveur proxy inversé. Le serveur proxy inversé décidera à quel serveur envoyer une demande à la base de la table de mappage IP: Port et de la stratégie d'équilibrage de charge déployée par le client. Généralement, la technologie de proxy inverse Nginx est utilisée.
Équilibrage de chargement du client: lorsque le navigateur fait une demande en arrière-plan, le client tirera les informations de service disponibles enregistrées sur le serveur vers le titulaire de service (par exemple: serveur Eureka), puis appuyez directement sur le serveur pour envoyer la demande en fonction de la stratégie d'équilibrage de charge. Tout ce processus se fait du côté du client et ne nécessite pas la participation du serveur proxy inversé.
1. Démarrer le serveur Eureka
Veuillez vous référer à cet exemple: Démarrez Eureka Server dans Spring Cloud
2. Démarrez le microservice et inscrivez-vous sur le serveur Eureka
Spring Cloud - Enregistrez le service de démarrage Spring sur le serveur Eureka
Afin de démontrer l'effet de l'équilibrage de la charge, démarrez un autre service, veuillez noter que le numéro de port doit être changé en incohérent
3. Ajouter le support du ruban
1. Ajouter les dépendances du ruban
2. Ajouter un support d'équilibrage de charge
package com.chhliu.springboot.restful; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.cloud.client.loadBalancer.loadBalanced; import org.springframework.cloud.netflix.eureka.enableeurekaclient; import org.springframework.context.annotation.bean; import org.springframework.web.client.RestTemplate; @Springbootapplication @enableeurekaclient classe publique SpringbootRestTemplateApplication {@autowired private restTEmplateBuilder Builder; @Bean @loadBalanced // L'ajout de support d'équilibrage de charge est très simple. Il vous suffit d'ajouter l'annotation @loadBalanced au RestTemplate. Ensuite, le Restemplate a la fonction d'équilibrage de charge. Si l'annotation @loadBalanced n'est pas ajoutée, une exception java.net.unknownhostException: Springboot-H2 sera signalée. Pour le moment, le service ne peut pas être appelé en enregistrant le nom du service sur le serveur Eureka, car RestTemplate ne peut pas mapper du nom du service à IP: Port, et la fonction de mappage est implémentée par LoadBalancerClient. public restLEmplate restTemplate () {return builder.build (); } public static void main (String [] args) {SpringApplication.run (SpringbootRestTemplateApplication.class, args); }} 3. Modifiez l'URL du microservice d'appel
package com.chhliu.springboot.restful.Controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.getMapping; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.restController; import org.springframework.web.client.RestTemplate; import com.chhliu.springboot.restful.vo.user; @RestController Public Class RestTemplateController {@autowired private restTemplate restTEmplate; @GetMapping ("/ template / {id}") utilisateur public findbyid (@pathvariable long id) {// Modifiez le formulaire IP: Port d'origine en le nom d'application enregistré sur l'utilisateur du serveur Eureka U = this.RestTemplate.getForObject ("http: // Springboot-h2 / uset /" + id, user.class); System.out.println (U); retourne u; }}4. Vérifiez l'état du serveur Eureka
5. Dans le navigateur, actualisez le http: // localhost: 7904 / modèle / 2 adresse plusieurs fois
6. Résultats des tests
7900 Service portuaire:
HiberNate: sélectionnez user0_.id as id1_0_0_, user0_.age as Age2_0_0_, user0_.balance as bancan3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ de user user0_ où user0_.id =? HiberNate: sélectionnez user0_.id as id1_0_0_, user0_.age as Age2_0_0_, user0_.balance as bancan3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ de user user0_ où user0_.id =? HiberNate: sélectionnez user0_.id as id1_0_0_, user0_.age as Age2_0_0_, user0_.balance as bancan3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ de user user0_ où user0_.id =? Hibernate: sélectionnez user0_.id as id1_0_0_, user0_.balance as bancan3_0_0_, user0_.name as name4_0_, user0_.username as username5_0_0_ de l'utilisateur user0_ où user0_.id =?
7901 Service portuaire:
HiberNate: sélectionnez user0_.id as id1_0_0_, user0_.age as Age2_0_0_, user0_.balance as bancan3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ de user user0_ où user0_.id =? HiberNate: sélectionnez user0_.id as id1_0_0_, user0_.age as Age2_0_0_, user0_.balance as bancan3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ de user user0_ où user0_.id =? HiberNate: sélectionnez user0_.id as id1_0_0_, user0_.age as Age2_0_0_, user0_.balance as bancan3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ de user user0_ où user0_.id =? Hibernate: sélectionnez user0_.id as id1_0_0_, user0_.balance as bancan3_0_0_, user0_.name as name4_0_, user0_.username as username5_0_0_ de l'utilisateur user0_ où user0_.id =? HiberNate: sélectionnez user0_.id as id1_0_0_, user0_.age as Age2_0_0_, user0_.balance as bancan3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ de user user0_ où user0_.id =?
7904 Service portuaire:
User [id = 2, username = user2, name = li si, âge = 20, bilan = 100,00] 2017-01-23 09: 58: 05.682 info 7436 --- [ErListUpDater-0] C.NETFLIX.Config.ChainedDynamicProperty: Property: Springboot-H2.Ribbon.ACTIVECONCECTIONNEM Niws.Loadbalancer.AvailabilityFilterringRule.ActiveConnectionSlimit = 2147483647 User [id = 2, username = user2, name = li si, Âge = 20, Balance = 100.00] User [id = 2, username = user2, name = li si, Âge = 20, balsine = 100,00] utilisateur [id = 2, nom usin Balance = 100,00] utilisateur [id = 2, nom d'utilisateur = user2, name = li si, âge = 20, bilan = 100,00] utilisateur [id = 2, username = user2, name = li si, Âge = 20] user [id = 2, username = user2, name = li,, Âge = 20, balsine = 100,00] utilisateur [id = 2, nom d'utilisateur = user2, nom = lisi = 20] utilisateur [id = 2, nom d'utilisateur = user2, name = lisi = 20] User [id = 2, nom d'utilisateur = user2, nom = lisi = 20] Balance = 100,00] utilisateur [id = 2, nom d'utilisateur = user2, name = li si, âge = 20, balance = 100,00]
D'après les résultats des tests ci-dessus, nous pouvons voir qu'un total de 7904 services de port ont été ajustés 9 fois, dont 7904 services de port ont été ajustés 4 fois, et 7901 ports ont été ajustés 5 fois, ce qui était exactement 9 fois.
Après les étapes ci-dessus, le ruban est essentiellement utilisé pour réaliser la fonction d'équilibrage de la charge du client.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.