Zuul é um balanceador de carga com base no roteamento da JVM e no lado do servidor produzido pela Netflix.
Funções de Zuul:
O mecanismo de regras da Zuul permite escrever regras e filtros por meio de qualquer idioma da JVM e suporta a construção baseada em Java e Groovy.
As propriedades de configuração zuul.max.host.Connections foram substituídas por duas novas propriedades de configuração, zuul.host.maxtotalConnections (número total de conexões) e zuul.host.maxperRoutConnections, (número de conexões por rota) têm valores inadimplentes de 200 e 20, respectivamente.
1. Por que usar isso
Nos sistemas de microsserviço construídos no SpringCloud, o Gateway Zuul é geralmente usado para executar algumas operações de filtragem, como a verificação do usuário. Por exemplo, o usuário armazena tokens nos parâmetros de cabeçalho ou URL. A camada de gateway precisa usar esse token para encontrar o usuário do usuário do usuário e armazená -lo na solicitação, para que os microsserviços subsequentes possam ser usados diretamente para evitar a consulta com tokens.
2. Conhecimento básico
O maior uso em Zuul é um acréscimo de roteamento, que é filtrado. Os filtros personalizados precisam implementar a interface Zuulfilter. No método run (), você pode usá -lo
RequestContext ctx = requestContext.getCurrentContext (); HttpServletRequest request = ctx.getRequest ();
Obtenha a solicitação, mas há apenas getParameter () na solicitação, mas nenhum método setParameter (), portanto, não é viável modificar diretamente o parâmetro URL. Além disso, embora o setAttribute () possa ser usado no Reqeust, pode ser que, devido aos diferentes escopos, o atributo definido aqui não possa ser obtido nos microsserviços subsequentes, portanto, outro método deve ser considerado.
3. Práticas específicas
O método final é usar
ctx.setRequest (novo httpServletRequestWrapper (request) {})A maneira de reconstruir a solicitação no contexto, o código é o seguinte:
importar javax.servlet.http.httpServletRequestWrapper; // Adicione UserID tente {inputStream em = ctx.getRequest (). GetInputStream (); Corpo de sequência = streamutils.copyToString (in, charset.ForName ("UTF-8")); System.out.println ("Body:" + Body); JsonObject json = jsonObject.FromObject (corpo); json.put ("userID", UserID); String newbody = json.toString (); System.out.println ("newbody:" + newbody); final byte [] reqbodybytes = newbody.getBytes (); ctx.setRequest (novo httpServletRequestWrapper (request) {@Override public servletInputStream getInputStream () lança ioexception {return new servletInputStreamWrapper (reqbodyBytes);} @Override public int getContentLength () {ReturnByByTes);} @Override public getContentLength () {ReturnByByTes); {return reqbodybytes.length; } catch (ioexception e) {e.printStackTrace (); }A idéia é obter o fluxo de entrada solicitado e reescrevê -lo, ou seja, reescrever os parâmetros JSON.
Nos controladores de microsserviço subsequentes, as formas podem ser usadas
@Requestbody map <string, objeto> body ====== Body.get ("userID");Dessa forma, aproveite o usuário do usuário em Zuulfilter
Quatro. Algumas tentativas
Ao reescrever o httpServletRequestwrapper, tentei reescrever getParameterNames() e getParameterMap() , na esperança de reescrever os parâmetros da URL, mas não entrou em vigor.
Resumir
O exposto acima é o método de modificar as informações do parâmetro de solicitação no SpringCloud, introduzidas pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!