Introducción a la cinta
En un sistema distribuido, cada microservicio implementará múltiples instancias. Cómo distribuir uniformemente a los consumidores de servicios a múltiples instancias de proveedores de servicios requiere el uso de equilibradores de carga.
Ribbon es un equilibrador de carga, que proporciona muchos algoritmos de equilibrio de carga, como la encuesta, y luego, después de configurar la dirección del proveedor de servicios, las solicitudes del consumidor del servicio se pueden distribuir de manera uniforme.
Integre la cinta para atender a los consumidores
Agregar biblioteca de dependencia de la cinta
<Spendency> <ProupId> org.springframework.boot </groupid> <artifactID> spring-boot-starter-ribbobn </artifactid> </dependency>
Agregue la anotación de @LoadBalaced para RestTemplate para integrar RestTemplate y Cink
@Bean@LoadBalancedPublic RestTemplate RestTemplate () {return new RestTemplate ();}Modifique el controlador y modifique la dirección de solicitud a http: // flim-user/user/. Cuando la cinta y el eureka se usan juntos, el nombre de host virtual se asignará automáticamente a la dirección de red del microservicio, y se inyecta LoadBalancerClient para emitir el nodo de microservicio seleccionado actualmente.
@RestControllerPublic MoViecontroller {private final logger log = loggerFactory.getLogger (moviecontroller.class); @AUtoWired private RestTemplate RestTTemplate; @Autowired LoadBalancercclient LoadBalancercclient; @GetMapping ("/user/{id}") User público FindByid (@PathVariable int id) {return this.resttemplate.getForObject ("http: // flim-user/"+id, user.class); } @Getmapping ("/loginstance") public void loginStance () {ServiceInStance ServiceInstance = this.LoadBalancerClient.Choose ("Flim-User"); log.info ("{}: {}: {}", ServiceInstance.getServiceId (), ServiceInstance.getHost (), ServiceInstance.getPort ()); }}Ejecutar el programa de prueba
{"id": 1, "Nombre de usuario": "Cuenta1", "Nombre": "Zhang San", "Age": 20, "Balance": 100.00}
La siguiente información se producirá al acceder al http: // localhost: 8010/log en varias veces.
Puede ver que las solicitudes se distribuirán uniformemente a los dos microservicios de usuario
2017-12-17 20: 47: 53.975 Información 12313 --- [NIO-8010-EXEC-2] com.linyuan.controller.moviecontroller: Flim-User: Linyuandembp: 8764
2017-12-17 20: 47: 54.215 Información 12313 --- [NIO-8010-EXEC-1] com.linyuan.controller.moviecontroller: Flim-User: Linyuandembp: 8763
2017-12-17 20: 47: 54.445 Información 12313 --- [NIO-8010-EXEC-3] com.linyuan.controller.moviecontroller: Flim-User: Linyuandembp: 8764
2017-12-17 20: 47: 54.690 Información 12313 --- [NIO-8010-EXEC-4] com.linyuan.controller.moviecontroller: Flim-User: Linyuandembp: 8763
2017-12-17 20: 47: 54.935 Información 12313 --- [NIO-8010-EXEC-5] com.linyuan.controller.moviecontroller: Flim-User: Linyuandembp: 8764
Nota: RestTemplate.getForObject (...) y LoadBalancercclient.Choose (...) no se pueden escribir en el mismo método, porque la templada de descanso es en realidad un cliente de cinta y ya contiene el comportamiento de "elegir".
Configuración de la cinta por código
Puede usar el código o atributos Java para personalizar la configuración de la cinta. La clase de configuración predeterminada de la cinta es RibbonClientConfiguration, o puede usar un POJO para personalizar la configuración de la cinta. Esta configuración es de grano fino. Diferentes clientes de cinta pueden usar diferentes configuraciones.
Crear una clase de configuración de cinta
/*** Esta clase es una clase de configuración* no debe ser escaneada por ComponentsCan*/ @ConfigurationPublic Class RibbonConfiguration {@Bean public Irule RibbonRule () {// Reglas de equilibrio de carga de configuración, cambie a retorno aleatorio nuevo randilRule (); }}Especifique las clases de configuración para los proveedores de servicios utilizando la anotación @ribbonclient o @ribbonclients
@SpringBootApplication @EndabledScoveryClient @RibbonClient (name = "Flim-User", Configuration = RibbonConfiguration.Class) public class FlimConsumerApplication {@Bean @LoadBalanced RESTTEMPLATE RESTTEMPLATE () {return New RestTeMplate ();; } public static void main (string [] args) {springapplication.run (flimconsumerApplication.class, args); }}Visite la dirección de prueba http: // localhost: 8010/registro de sesión y puede ver que la solicitud se distribuirá aleatoriamente a dos microservicios.
2017-12-17 21: 08: 52.769 Información 12524 --- [NIO-8010-EXEC-7] com.linyuan.controller.moviecontroller: Flim-User: Linyuandembp: 8763
2017-12-17 21: 08: 52.946 Información 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 Información 12524 --- [IO-8010-EXEC-10] com.linyuan.controller.moviecontroller: Flim-User: Linyuandembp: 8764
2017-12-17 21: 08: 53.511 Información 12524 --- [NIO-8010-EXEC-1] com.linyuan.controller.moviecontroller: Flim-User: Linyuandembp: 8763
Nota: La clase de ConbonConfiguration no puede ser escaneada por @ComponentsCan, de lo contrario, la información de configuración será compartida por todos @RibbonClient. Por lo tanto, si solo desea personalizar la configuración de un determinado cliente de cinta, debe evitar que @ComponentsCan lo escanee.
Configurar la cinta en el archivo de configuración
Personalizar las propiedades de la cinta a través de archivos de configuración es más conveniente, y el prefijo de configuración es <ClientName> .Ribbon.
Definir la configuración de la cinta a través de archivos de configuración
Flim-User: Ribbon: NfloadBalancerrulecLassName: com.netflix.loadbalancer.randomrule
Configuración global de la cinta común
Ribbon: ConnectionTimeOut: #Connection Tiempo de espera de lectura: #Read TIMEOUT OKTORETRYAnLOPERATOTOTIONS: #Cretry Todas las solicitudes de operación MaxAutorETriesNextServer: #Switch Server Instance RETRies MaxAutorEtRies: #Crety en la instancia actual ServerlistResfreshinterval: #RESET TIEMPO ENTRE REFERTAR LA FUENTE DE LISTA DE SERVICIOS
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.