Introduction au ruban
Dans un système distribué, chaque microservice déploiera plusieurs instances. Comment distribuer uniformément les consommateurs de services à plusieurs instances de prestataires de services nécessite l'utilisation d'équilibreurs de charge.
Le ruban est un équilibreur de charge, qui fournit de nombreux algorithmes d'équilibrage de charge, tels que le sondage, puis, après avoir configuré l'adresse du fournisseur de services, les demandes de consommation de service peuvent être distribuées uniformément.
Intégrer le ruban pour servir les consommateurs
Ajouter la bibliothèque de dépendance au ruban
<dependency> <proupId> org.springframework.boot </rombasid> <ArtifactId> printemp-boot-starter-ribbobn </etefactId> </Dependency>
Ajouter une annotation @loadBalaced pour restemplate pour intégrer RestTemplate et ruban
@ Bean @ loadBalancedPublic RestTemplate RestTemplate () {return new RestTemplate ();}Modifiez le contrôleur et modifiez l'adresse de demande à http: // flim-user / user /. Lorsque le ruban et l'Eureka sont utilisés ensemble, le nom d'hôte virtuel sera automatiquement mappé à l'adresse réseau du microservice, et le chargeur de chargement est injecté pour sortir le nœud de microservice actuellement sélectionné.
@RestControllerPublic class MovieController {private final logger log = loggerfactory.getLogger (MovieController.class); @Autowired Private RestTemplate RestTemplate; @Autowired Private LoadBalancerClient LoadBalancerClient; @GetMapping ("/ user / {id}") utilisateur public findbyid (@pathvariable int id) {return this.restTemplate.getForObject ("http: // flim-user /" + id, user.class); } @GetMapping ("/ log-instance") public void Loginstance () {ServiceInstance ServiceInstance = this.loadBalancerCIent.choose ("flim-user"); log.info ("{}: {}: {}", serviceInstance.getServiceId (), serviceInstance.Gethost (), serviceInstance.getport ()); }}Exécutez le programme de test
{"id": 1, "nom d'utilisateur": "Account1", "Nom": "Zhang San", "Age": 20, "Balance": 100,00}
Les informations suivantes seront sorties lors de l'accès au http: // localhost: 8010 / log-instance plusieurs fois.
Vous pouvez voir que les demandes seront réparties uniformément aux deux microservices utilisateur
2017-12-17 20: 47: 53.975 Info 12313 --- [Nio-8010-Exec-2] com.linyuan.controller.moviecontroller: flim-user: linyuandembp: 8764
2017-12-17 20: 47: 54.215 Info 12313 --- [Nio-8010-Exec-1] com.linyuan.controller.moviecontroller: flim-user: linyuandembp: 8763
2017-12-17 20: 47: 54.445 Info 12313 --- [Nio-8010-Exec-3] com.linyuan.Controller.MovieController: Flim-User: Linyuandembp: 8764
2017-12-17 20: 47: 54.690 Info 12313 --- [Nio-8010-Exec-4] com.linyuan.Controller.MovieController: Flim-User: Linyuandembp: 8763
2017-12-17 20: 47: 54.935 Info 12313 --- [Nio-8010-Exec-5] com.linyuan.Controller.MovieController: Flim-User: Linyuandembp: 8764
Remarque: RestTemplate.getForObject (...) et LoadBalanClient.Choose (...) ne peuvent pas être écrits dans la même méthode, car Rest-Template est en fait un client du ruban et lui-même contient déjà le comportement "Choisir".
Configuration du ruban par code
Vous pouvez utiliser le code Java ou les attributs pour personnaliser la configuration du ruban. La classe de configuration par défaut du ruban est RibBonClientConfiguration, ou vous pouvez utiliser un POJO pour personnaliser la configuration du ruban. Cette configuration est à grain fin. Différents clients du ruban peuvent utiliser différentes configurations.
Créer une classe de configuration du ruban
/ ** * Cette classe est une classe de configuration * ne doit pas être scannée par ComponentsCan * / @ ConfigurationPublic Class RibBonConfiguration {@Bean public Irule RubbonRule () {// Règles d'équilibrage de charge de configuration, Changement en Random RandomRule RandomRule (); }}Spécifiez des cours de configuration pour les fournisseurs de services à l'aide de l'annotation @RibBonClient ou @RibbonClients
@ SpringbootApplication @veablediscoveryClient @ rubbonClient (name = "flim-user", configuration = rubbonConfiguration.class) public class flimconsumerApplication {@bean @loadBalanced public restrontlate restTemplate () {return new resttemplate (); } public static void main (String [] args) {SpringApplication.run (flimconsumerApplication.class, args); }}Visitez l'adresse de test http: // localhost: 8010 / connexion logarithmique et vous pouvez voir que la demande sera distribuée au hasard à deux microservices.
2017-12-17 21: 08: 52.769 Info 12524 --- [Nio-8010-Exec-7] com.linyuan.Controller.MovieController: Flim-User: Linyuandembp: 8763
2017-12-17 21: 08: 52.946 Info 12524 --- [NIO-8010-EXEC-8] com.linyuan.Controller.MovieController: Flim-User: Linyuandembp: 8763
2017-12-17 21: 08: 53.138 Info 12524 --- [NIO-8010-EXEC-9] com.linyuan.controller.MovieController: Flim-User: Linyuandembp: 8763
2017-12-17 21: 08: 53.319 Info 12524 --- [IO-8010-EXEC-10] com.linyuan.controller.moviecontroller: flim-user: linyuandembp: 8764
2017-12-17 21: 08: 53.511 Info 12524 --- [NIO-8010-EXEC-1] com.linyuan.controller.moviecontroller: flim-user: linyuandembp: 8763
Remarque: La classe RibbonConfiguration ne peut pas être analysée par @ComponentsCan, sinon les informations de configuration seront partagées par tous les @RibbonClient. Par conséquent, si vous souhaitez uniquement personnaliser la configuration d'un certain client du ruban, vous devez l'empêcher d'être scanné par @ComponentsCan.
Configurer le ruban dans le fichier de configuration
La personnalisation des propriétés du ruban via des fichiers de configuration est plus pratique, et le préfixe de configuration est <lientName> .Ribbon.
Définir la configuration du ruban via des fichiers de configuration
flim-user: ruban: nfloadBalanCerruleClassName: com.netflix.loadBalancer.randomrule
Configuration globale du ruban couramment utilisée
Ribbon: ConnectionTimeout: #Connection TimeOut ReadTimeout: #Read TimeOut OktoretryOnAllOperaTotions: #retry Toutes les demandes d'opération MaxAutoreTRIesNextServer: #Switch Server Instance Rettise MaxAutoreTries: #retry sur l'instance actuelle ServerListreFreshInterval: #Reet Time entre la refonte de la source de la liste de services
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.