Zuul-это балансировщик нагрузки на основе маршрутизации JVM и сервера, созданной Netflix.
Zuul функции:
Двигатель правил Zuul позволяет записать правила и фильтры через любой язык JVM и поддерживает конструкцию на основе Java и Groovy.
Свойства конфигурации zuul.max.host.connections были заменены двумя новыми свойствами конфигурации: zuul.host.maxtotalconnections (общее количество соединений) и zuul.host.maxperrouteConnections, (количество соединений по маршруту) имеют значения по умолчанию 200 и 20 соответственно.
1. Зачем использовать это
В системах микросервиса, построенных на Springcloud, Gateway Zuul обычно используется для выполнения некоторых операций фильтрации, таких как проверка пользователей. Например, пользователь хранит токены в параметрах заголовка или URL. Слой шлюза должен использовать этот токен, чтобы найти пользовательский идентификатор пользователя и сохранить его в запросе, чтобы можно было использовать последующие микросервисы, чтобы избежать запроса с токенами.
2. Основные знания
Самое большое использование в Zuul - это дополнение к маршрутизации, которая является фильтром. Пользовательские фильтры должны реализовать Zuulfilter Interface. В методе run () вы можете его использовать
RequestContext ctx = requestContext.getCurrentContext (); Httpservlectrequest request = ctx.getRequest ();
Получите запрос, но в запросе есть только getParameter (), но нет метода SetParameter (), поэтому невозможно напрямую изменять параметр URL. Кроме того, хотя SetAtTribute () может использоваться в Requust, может быть, что из -за различных областей, набор атрибутов здесь не может быть получен в последующих микросервисах, поэтому необходимо учитывать другой метод.
3. Конкретные практики
Окончательный метод - использовать
ctx.setrequest (новый httpservletrequestwrapper (request) {})Способ реконструкции запроса в контексте, код выглядит следующим образом:
Импорт javax.servlet.http.httpservletrequestwrapper; // Добавить userId try {inputStream in = ctx.getRequest (). GetInputStream (); String body = streamutils.copytostring (in, charset.forname ("utf-8")); System.out.println ("body:" + body); JsonObject json = jsonObject.fromObject (body); json.put ("userId", userId); String newbody = json.toString (); System.out.println ("newbody:" + newbody); окончательный байт [] reqbodyBytes = newbody.getBytes (); ctx.setrequest (new httpservlectrequestwrapper (request) {@override public servletinptream getInputStream () throws ioexception {return new servletinptrapper (reqbodybytes);} @override public getContentlength () {requebodytes.length; getContentLengthlong () {return reqbodyBytes.length; } catch (ioException e) {e.printstackTrace (); }Идея состоит в том, чтобы получить запрошенный поток ввода и переписать его, то есть переписать параметры JSON.
В последующих контроллерах микросервиса можно использовать формы
@Requestbody map <string, объект> body ====== body.get ("userId");Таким образом, пройдите userid в Zuulfilter
Четыре Некоторые попытки
Переписывая httpservlectrequestwrapper, я попытался переписать методы getParameterNames() и getParameterMap() , надеясь переписать параметры URL, но это не вступило в силу.
Суммировать
Выше приведено метод изменения информации о параметрах запроса в Springcloud, введенной вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!