Apertura
Este ejemplo se basa en la base de datos de memoria H2 de SpringBoot, realización de pruebas unitarias e independientes de la base de datos y en el uso de RestTemplate para consumir el servicio RESTful de Spring Boot.
En el ejemplo de servicio RESTFUL que utiliza RestTemplate para consumir el arranque de Spring, mencionamos que al llamar al servicio de arranque de Spring, la URL del servicio debe escribirse en el archivo de configuración, pero no importa cuál de estos dos métodos, una vez que la dirección IP cambie, el programa debe cambiarse y el servicio se vuelve a desplegar. Este problema puede evitarse efectivamente cuando se usa cinta.
Prefacio:
Hay dos formas de implementar el equilibrio de carga suave, a saber, el equilibrio de carga en el servidor y el equilibrio de carga en el cliente.
Balancio de carga del lado del servidor: cuando el navegador emite una solicitud al fondo, primero enviará una solicitud al servidor proxy inverso. El servidor proxy inverso decidirá a qué servidor enviar una solicitud en función de la tabla de mapeo de puertos y la política de equilibrio de carga implementada por el cliente. En general, se utiliza la tecnología de proxy inversa NGINX.
Equilibrio de carga del cliente: cuando el navegador hace una solicitud en el fondo, el cliente extraerá la información de servicio disponible registrada al servidor al registrante de servicio (por ejemplo: Eureka Server), y luego presionará directamente qué servidor enviará la solicitud de acuerdo con la política de equilibrio de carga. Todo este proceso se realiza en el lado del cliente y no requiere la participación del servidor proxy inverso.
1. Inicie Eureka Server
Consulte este ejemplo: Inicie Eureka Server en Spring Cloud
2. Inicie el microservicio y regístrese con Eureka Server
Spring Cloud - Registre el servicio de arranque de Spring a Eureka Server
Para demostrar el efecto del equilibrio de carga, inicie otro servicio, tenga en cuenta que el número de puerto debe cambiarse a inconsistente
3. Agregar soporte de cinta
1. Agregue las dependencias de la cinta
2. Agregar soporte de equilibrio de carga
paquete com.chhliu.springboot.restful; importar org.springframework.beans.factory.annotation.aUtowired; importar org.springframework.boot.springapplication; importar org.springframework.boot.autoconfigure.springbootapplication; importar org.springframework.boot.web.client.resttemplateBuilder; importar org.springframework.cloud.client.loadbalancer.loadbalanced; importar org.springframework.cloud.netflix.eureka.enedeurekaclient; importar org.springframework.context.annotation.bean; importar org.springframework.web.client.resttemplate; @SpringBootApplication @EnableeureKaclient Class public SpringBootRestTemplataApplication {@AUTOWIREDIRDIRD RESTTempLateBuilder Builder; @Bean @LoadBalanced // Agregar soporte de equilibrio de carga es muy simple. Solo necesita agregar la anotación @LoadBalanced a RestTemplate. Luego, la plantilla RESTT tiene la función del equilibrio de carga. Si no se agrega la anotación @LoadBalanced, se informará un java.net.unknownhostException: la excepción SpringBoot-H2. En este momento, no se puede llamar al servicio registrando el nombre del servicio en el servidor Eureka, porque RestTemplate no puede mapear desde el nombre del servicio a IP: puerto, y la función de mapeo es implementada por LoadBalancerclient. public ResttEmplate RestTemplate () {return Builder.Build (); } public static void main (string [] args) {springapplication.run (springbootresttemplataApplication.class, args); }} 3. Modifique la URL del microservicio de llamadas
paquete com.chhliu.springboot.restful.controller; importar org.springframework.beans.factory.annotation.aUtowired; importar org.springframework.web.bind.annotation.getMapping; importar org.springframework.web.bind.annotation.pathvariable; importar org.springframework.web.bind.annotation.restController; importar org.springframework.web.client.resttemplate; import com.chhliu.springboot.restful.vo.user; @RestController Class public ResttEmplateController {@aUtoWired private RestTemplate RestTemplate; @GetMapping ("/Template/{id}") Public User FindById (@PathVariable Long ID) {// Cambie el formulario IP: Port original al nombre de la aplicación registrado en Eureka Server User u = this.resttemplate.getForObject ("http: // springboot-h2/user/" + id, user.class); System.out.println (U); devolver u; }}4. Verifique el estado del servidor Eureka
5. En el navegador, actualice el http: // localhost: 7904/plantilla/2 dirección muchas veces
6. Resultados de la prueba
7900 Servicio de puerto:
Hibernate: seleccione User0_.id como ID1_0_0_, user0_.age como AGE2_0_0_, user0_.balance como balance3_0_0_, user0_.name as name4_0_0_, user0_.username como username5_0_ de usuarios de usuario 0_ donde user0_.id =? Hibernate: seleccione User0_.id como ID1_0_0_, user0_.age como AGE2_0_0_, user0_.balance como balance3_0_0_, user0_.name as name4_0_0_, user0_.username como username5_0_ de usuarios de usuario 0_ donde user0_.id =? Hibernate: seleccione User0_.id como ID1_0_0_, user0_.age como AGE2_0_0_, user0_.balance como balance3_0_0_, user0_.name as name4_0_0_, user0_.username como username5_0_ de usuarios de usuario 0_ donde user0_.id =? Hibernate: seleccione USER0_.ID AS ID1_0_0_, user0_.balance como balance3_0_0_, user0_.name as name4_0_0_, user0_.username como username5_0_0_ desde user User0_ donde user0_.id =?
7901 Servicio de puerto:
Hibernate: seleccione User0_.id como ID1_0_0_, user0_.age como AGE2_0_0_, user0_.balance como balance3_0_0_, user0_.name as name4_0_0_, user0_.username como username5_0_ de usuarios de usuario 0_ donde user0_.id =? Hibernate: seleccione User0_.id como ID1_0_0_, user0_.age como AGE2_0_0_, user0_.balance como balance3_0_0_, user0_.name as name4_0_0_, user0_.username como username5_0_ de usuarios de usuario 0_ donde user0_.id =? Hibernate: seleccione User0_.id como ID1_0_0_, user0_.age como AGE2_0_0_, user0_.balance como balance3_0_0_, user0_.name as name4_0_0_, user0_.username como username5_0_ de usuarios de usuario 0_ donde user0_.id =? Hibernate: seleccione USER0_.ID AS ID1_0_0_, user0_.balance como balance3_0_0_, user0_.name as name4_0_0_, user0_.username como username5_0_0_ desde user User0_ donde user0_.id =? Hibernate: seleccione User0_.id como ID1_0_0_, user0_.age como AGE2_0_0_, user0_.balance como balance3_0_0_, user0_.name as name4_0_0_, user0_.username como username5_0_ de usuarios de usuario 0_ donde user0_.id =?
7904 Servicio de puerto:
User [id=2, username=user2, name=Li Si, age=20, balance=100.00] 2017-01-23 09:58:05.682 INFO 7436 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty : Flipping property: springboot-h2.ribbon.ActiveConnectionsLimit to use NEXT property: niwss.loadbalancer.availabilityFilteringrule.activeconnectionsLimit = 2147483647 user [id = 2, username = user2, name = li si, age = 20, balance = 100.00] user [id = 2, username = user2, name = li si, edad = 20, balance = 100.00] Age = 20, Balance = 100.00] User [id = 2, username = user2, name = li si, age = 20, balance = 100.00] user [id = 2, username = user2, name = li si, age = 20, balance = 100.00] user [id = 2, username = user2, name = Si, edad = 20, balance = 100.00] user [id = 2, username, nombre = nombre de user2, nam. Age = 20, Balance = 100.00] User [id = 2, username = user2, name = li si, edad = 20, balance = 100.00]
De los resultados de la prueba anterior, podemos ver que un total de 7904 servicios de puerto se ajustaron 9 veces, de las cuales 7904 servicios de puerto se ajustaron 4 veces, y 7901 puertos se ajustaron 5 veces, lo que fue exactamente 9 veces.
Después de los pasos anteriores, la cinta se usa básicamente para realizar la función de equilibrio de carga del cliente.
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.