Zuul es un equilibrador de carga basado en el enrutamiento JVM y el lado del servidor producido por Netflix.
Funciones de Zuul:
El motor de reglas de Zuul permite escribir reglas y filtros a través de cualquier idioma JVM, y admite Java y construcción basada en Groovy.
Las propiedades de configuración zuul.max.host.conextions han sido reemplazadas por dos nuevas propiedades de configuración, zuul.host.maTtotalConnections (número total de conexiones) y zuul.host.maxperRouteconnections, (número de conexiones por ruta) tienen valores predeterminados de 200 y 20, respectivamente.
1. ¿Por qué usar esto?
En los sistemas de microservicio construidos en SpringCloud, Gateway Zuul se usa generalmente para realizar algunas operaciones de filtrado, como la verificación del usuario. Por ejemplo, el usuario almacena tokens en los parámetros de encabezado o URL. La capa de puerta de enlace debe usar este token para encontrar el ID de usuario del usuario y almacenarlo en la solicitud para que los microservicios posteriores puedan usarse directamente para evitar consultar con tokens.
2. Conocimiento básico
El mayor uso en Zuul es adicional al enrutamiento, que es el filtro. Los filtros personalizados deben implementar la interfaz Zuulfilter. En el método run (), puede usarlo
RequestContext ctx = requestContext.getCurrentContext (); HttpservletRequest request = ctx.getRequest ();
Obtenga la solicitud, pero solo hay getParameter () en la solicitud pero no hay método setParameter (), por lo que no es factible modificar directamente el parámetro URL. Además, aunque setAttribute () se puede usar en reqeust, puede ser que debido a los diferentes ámbitos, el atributo establecido aquí no se puede obtener en microservicios posteriores, por lo que se debe considerar otro método.
3. Prácticas específicas
El método final es usar
ctx.setRequest (nuevo httpservletRequestWrapper (request) {})La forma de reconstruir la solicitud en el contexto, el código es el siguiente:
import javax.servlet.http.httpservletrequestwrapper; // Agregar intento de usuario {inputStream in = ctx.getRequest (). GetInputStream (); String body = streamUtils.copyToString (in, charset.forname ("utf-8")); System.out.println ("Body:" + Body); JsonObject json = jsonObject.FromObject (cuerpo); json.put ("UserId", UserId); String newBody = json.ToString (); System.out.println ("Newbody:" + Newbody); Byte final [] reqbodyBytes = newbody.getBytes (); ctx.setRequest (nuevo httpServletReQuestWrapper (request) {@Override public ServletInputStream getInputStream () lanza ioexception {return New ServletInputStreamWrapper (reqBodyBytes);} @Override pública int getContentLength () {return reqbodyByByTes.Lenggth;} @Override getContentLengthLong () {return reqBodyBytes.length; } catch (ioException e) {E.PrintStackTrace (); }La idea es obtener el flujo de entrada solicitado y reescribirlo, es decir, reescribir los parámetros JSON.
En los controladores de microservicio posteriores, se pueden usar formas
@RequestBody Map <String, Object> Body ====== Body.get ("UserId");De esta manera, pase el ID de usuario en Zuulfilter
Cuatro. Algunos intentos
Al reescribir el httpservletrequest wrapper, intenté reescribir getParameterNames() y getParameterMap() , con la esperanza de reescribir los parámetros de URL, pero no entró en vigencia.
Resumir
Lo anterior es el método para modificar la información de parámetros de solicitud en SpringCloud presentada por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!