Introducción
Zuul es un enrutador basado en Netflix JVM y un equilibrador de carga del lado del servidor. El escenario más utilizado es reemplazar el microservicio de backend proxy reverso NGINX para el acceso a la interfaz de usuario frontal.
Zuul usa Ribbon para localizar una instancia que se envía por Discovery, y todas las solicitudes se ejecutan con el comando Hystrix, por lo que la falla se mostrará en la métrica de Hystrix.
Nota: Zuul no incluye el Cliente Discovery, por lo que para las rutas basadas en ID de servicio, una de las rutas debe proporcionarse en el ClassPath.
Zuul es una puerta de enlace API y un componente de filtrado proporcionado por Spring Cloud. Proporciona las siguientes funciones:
En este tutorial, utilizaremos ZUUL para reenviar la solicitud web/producto al servicio de producto correspondiente, y definiremos un Filtro previo para verificar si se ha reenviado Zuul.
Entorno básico
Código fuente del proyecto
haga clic aquí
Crear servicio Zuul
Crea un proyecto Maven en IntelliJ:
Luego agregue el siguiente código en pom.xml:
<? xml versión = "1.0" encoding = "utf-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion> 4.0.0 </modelversion> <grupo> cn.zxuqian </groupid> <sartifid> <versión> 1.0-snapshot </versewer> <-parent> <grupoD> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> <versión> 2.0.1.1.release </version> </parent> <pendencies> <epelpentency> <grupid> org.springframework.cloud </groupid <! Spring-Cloud-Starter-Zuul-> <artifactID> Spring-Cloud-Starter-Netflix-Zuul </artifactID> </pendency> <Spendency> <MoupRupid> org.springframework.cloud </groupId> <artifactid> spring-cloud-starter-netflix-eureka-client </artifactid> <///dependency> <pendency> <MoupRoD> org.springframework.cloud </groupid> <artifactID> spring-ncloud-starter-config </artifactid> </pendency> <pendency> <grupeD> org.springframework.boot </proupId> <artifactid> spring-boot-starter-actuator </artifactid> <//dependency> <pendency> <MoupRoD> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> </dependency> </dependency> </pendency> <SpendencyManagement> <ependencies> <pendency> <proupid> org.springframework.cloud </groupid> <artifactID> spring-cloud-dependencies </artifactid> <versever> finchley.m9 </versewers> <proy> pom </pype> <cope> import </cope> </pendency> </dependency> </pendencymanagement> <propiences> <java.version> 1.8 </Java.version> </propiences> <100. <MoupRid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </arfactid> </glugins> </struct> <repositories> <repositorio> <d> spring-milestones </id> <name> hitos de primavera </name> <Url> https://repo.spring.io/libs-milestone </srl> <stapshots> <Dabled> false </habilitado> </snapshots> </ repository> </ Repository> </ Repository> </ Repository> </Repositories> </ject> </proyecto>
Cabe señalar que el Artifactid de Zuul dado por el tutorial del sitio web oficial de Spring es Spring-Cloud-Starter-Zuul, que es el nombre de la antigua versión de Zuul. Ha sido renombrado Spring-Cloud-Starter-Netflix-Zuul en nuestra versión Finchley.M9.
Agregue el archivo src/main/recursos/bootstrap.yml y especifique spring.application.name:
Primavera: Aplicación: Nombre: Zuul-Server
Crea la clase CN.ZXUQIAN.APPLICACIÓN:
paquete cn.zxuqian; import cn.zxuqian.filters.prefilter; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplation; import og.springframework.cloud.cloud.discoveryishiscoverycloatlient; org.springframework.cloud.netflix.zuul.EnableZuulProxy;import org.springframework.context.annotation.Bean;@EnableZuulProxy@EnableDiscoveryClient@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean Public Prefilter Prefilter () {return new Prefilter (); }}Aquí @EnableZuulProxy se usa para especificar un proxy inverso usando Zuul y reenviar nuestra solicitud al servidor correspondiente. Entonces el descubrimiento de servicio de Eureka fue habilitado. Zuul también usará cinta para el equilibrio de carga de forma predeterminada, por lo que puede descubrir servicios registrados a través de Eureka. Prefilter es un prefiltro que realiza algunas operaciones antes de procesar la solicitud de solicitud. Su código es el siguiente:
paquete cn.zxuqian.filters; import com.netflix.zuul.zuulfilter; import com.netflix.zuul.context.requestContext; import com.netflix.zuul.exception.zuulexception; import og.slf4j.logger; import org.slf4j.loggerfactory; importar; import javax.servlet.http.httpservletRequest; Public Class Prefilter extiende Zuulfilter {private static logger log = loggerFactory.getLogger (prefilter.class); @Override public String filtType () {return "pre"; } @Override public int filterOrder () {return 1; } @Override public boolean deberíafilter () {return true; } @Override public object run () lanza ZuulException {requestContext ctx = requestContext.getCurrentContext (); HttpservletRequest request = ctx.getRequest (); log.info (String.Format (" %s de solicitud de método %s", request.getMethod (), request.getRequestUrl (). toString ())); regresar nulo; }} FilterType: hay cuatro tipos de filtros incorporados en Zuul, pre, ruta, post y error, que representan antes, durante, después y después de un error.
FilterOrder: especifica el orden en el que se ejecuta el filtro.
Debe Filter: si habilita este filtro.
Ejecutar: la lógica comercial del filtro. Aquí simplemente registro el método de solicitud y la ruta de solicitud de reqeust.
A continuación, cree el archivo zuul-server.yml en el repositorio de git en nuestro centro de configuración y agregue la siguiente configuración:
servidor: puerto: 8083zuul: rutas: productos: ruta: /producto /** servicioid: servicio de producto
Aquí, el puerto de Zuul está configurado para ser 8083, y luego todos los / productos / solicitudes se asignan a nuestro servicio de servicio de productos. Si el servicio no está configurado, la clave de productos será el servicio de servicio de forma predeterminada. En nuestro ejemplo, el ServiceId incluye, por lo que el ServiceId se especifica a continuación. Enviar a GIT después de que la configuración esté completa.
Actualizar el servicio de productos
El URI de Productservice se ha cambiado un poco para hacerlo más en línea con el estilo de descanso:
@RequestMapping (" /list") public String productList () {log.info ("Access to /Products Endpoint"); regresar "abrigo, chaqueta, suéter, camiseta";}Aquí, la ruta que coincide con @requestMapping se cambia a /list, que era previamente /productos.
Actualizar el cliente web
Agregue un nuevo método a Productservice en nuestro cliente web:
public String productListzuul () {return this.resttemplate.getForObject ("http: // zuul-server/producto/list", string.class);}Esta vez solicitamos directamente el servicio Zuul-Server, y luego representará nuestra solicitud al servicio de servicio del producto. Finalmente, agregue un método de manejo de solicitudes en el ProductController:
@RequestMapping ("/Product/List") Public String ProductListzuul () {return Productservice.ProductListzuul ();}Se utiliza para procesar las solicitudes de procesos /productos /listas, y luego llamar a los métodos en la clase de servicios de productos.
prueba
Use MVN Spring-Boot: Ejecute para iniciar ConfigServer, Registry, Zuulserver, Productservice y proyectos web, luego inicie el segundo servicio de productos y use server_port = 8082 Spring-Boot: Run.
Visite http: // localhost: 8080/producto/lista varias veces, y además de ver los resultados devueltos en el navegador, también veremos las siguientes palabras en la ventana de la línea de comandos de Zuulserver:
Obtener solicitud de método http: // xuqians-imac: 8083/producto/list
Luego, en las ventanas de la línea de comando de los dos servicios de productos, también veremos apariciones aleatorias
Acceso a /punto final de productos
Esto significa que Zuulserver también cargará automáticamente el equilibrio.
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.