Введение
Zuul-это маршрутизатор на основе Netflix JVM и балансировщик нагрузки на стороне сервера. Наиболее часто используемым сценарием является замена MicroService Backend Proxy Backend NGINX для доступа к интерфейсу.
Zuul использует ленту для поиска экземпляра, который пересылается Discovery, и все запросы выполняются с помощью команды Hystrix, поэтому сбой будет отображаться в метрике Hystrix.
Примечание. Zuul не включает клиента Discovery, поэтому для маршрутов на основе идентификаторов обслуживания один из маршрутов должен быть предоставлен в трассе.
Zuul - это API -шлюз и компонент фильтрации, предоставляемый Spring Cloud. Он предоставляет следующие функции:
В этом уроке мы будем использовать Zuul для пересылки веб -запроса/продукта в соответствующую службу продуктов и определим предварительный фильтр, чтобы проверить, был ли Zuul перенаправлен.
Основная среда
Исходный код проекта
кликните сюда
Создать сервис Zuul
Создайте проект Maven в IntelliJ:
Затем добавьте следующий код в pom.xml:
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <doliderversion> 4.0.0 </modelversion> <groupid> cn.zxuqian </GroupDifact> <brouppact> <briteDIIFID> <GroupBact> <groupBact> <groupBact> <groupBact> <groupBact> <groupBact> <groupBact> <groupBact> <briteversiid> <groupBact> <briteversion> <briteversion> <briteversion> <groupDever> <groupId> cn.zxU <sersion> 1.0-snapshot </version> <parent> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-boot-Starter-parent </artifactid> <sersion> 2.0.1.Release </version> </parent> <DehyEdendy> <DepectiD> <groupid> org.springframe.cloud.cloud. spring-cloud-starter-zuul --> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </depervice> </depervice> </dependency> </dependency> <DevendencyManage> <depertifactiad> <groupid> org.spramework. <sersion> finchley.m9 </version> <sype> pom </type> <cerpope> import </scope> </depervice> </depervice> </degy DeviefyManagement> <properties> <java.version> 1.8 </java.version> </свойства> <Buld> <blicins> <plugin> <groupid> org.springFramework. <artifactId>spring-boot-maven-plugin</artifactId> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/libs-milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </Repository> </Repository> </Repository> </Repository> </Repositories> </project>
Следует отметить, что артефактида Zuul, данная The Spring Office Rutorial, является Spring-Cloud-Starter-Zuul, который является названием старой версии Zuul. Он был переименован в Spring-Cloud-Starter-Netflix-Zuul в нашей версии Finchley.m9.
Добавьте файл src/main/resources/bootstrap.yml и укажите spring.application.name:
Весна: Приложение: Имя: Zuul-Server
Создайте класс cn.zxuqian.application:
Пакет cn.zxuqian; импорт cn.zxuqian.filters.prefilter; import org.springframework.boot.springapplication; импорт org.springframework.boot.autoconfigure.springbootapplication; импорт org.sprameframe.client.client.discabletablication; import org.spramework.client.colient.niscabletabplication; import.spramework.client.colient.niscabletablication; org.springframework.cloud.netflix.zuul.enablezuulproxy; import org.springframework.context.annotation.bean;@enablezuulproxy@enablediscoveryclient@SpringbootApplicationPublic Class Application {public Static Void Main (string) {SpringsApplication. } @Bean public prefilter prefilter () {return new prefilter (); }}Здесь @EnableSuulProxy используется для указания обратного прокси с использованием Zuul и пересылки нашего запроса на соответствующий сервер. Затем было включено обнаружение услуг Эврики. Zuul также будет использовать ленту для балансировки нагрузки по умолчанию, поэтому вы можете обнаружить зарегистрированные услуги через Eureka. Префильтер - это предпочтение, которое выполняет некоторые операции до обработки запроса запроса. Его код заключается в следующем:
Пакет cn.zxuqian.filters; import com.netflix.zuul.zuulfilter; import com.netflix.zuul.context.requestcontext; import com.netflix.zuul.exception.zuulexception; import.slf4j.logger; import org.slf4j.loggerfactory; importf4j.logger; import org.slf4j.loggerfactory; javax.servlet.http.httpservletrequest; public class prefilter extends zuulfilter {private Static Logger log = loggerfactory.getLogger (prefilter.class); @Override public String filterType () {return "pre"; } @Override public int filterorder () {return 1; } @Override public boolean supfilter () {return true; } @Override public Object run () throws zuulexception {requestContext ctx = requestContext.getCurrentContext (); Httpservlectrequest request = ctx.getRequest (); log.info (string.format (" %s запрос метода %s", request.getMethod (), request.getRequesturl (). toString ())); вернуть ноль; }} Filtertype - В Zuul, Pre, Pro, Prot, Post и ошибках существует четыре встроенных типа фильтров, которые представляют до, во время, после и после ошибки.
Filterorder - указывает порядок, в котором выполняется фильтр.
должен Filter - чтобы включить этот фильтр.
Запустить - бизнес -логика фильтра. Здесь я просто регистрирую метод запроса и путь запроса Reqeust.
Затем создайте файл Zuul-server.yml в репозитории GIT в нашем центре конфигурации и добавьте следующую конфигурацию:
Сервер: порт: 8083zuul: Маршруты: Продукты: Путь: /Продукт /** ServiceId: Service Product
Здесь порт Zuul настроен на 8083, а затем все / продукт / запросы отображаются с нашей службой услуги по обслуживанию продуктов. Если ServiceID не настроен, ключ продуктов будет ServiceID по умолчанию. В нашем примере ServiceID включает в себя -поэтому ServiceID указан ниже. Отправить в GIT после завершения конфигурации.
Обновление Productservice
URI of Productservice был немного изменен, чтобы сделать его больше в соответствии с стилем отдыха:
@Requestmapping (" /list") public String productlist () {log.info ("access to /products endpoint"); вернуть "пальто, куртка, свитер, футболка";}Здесь, соответствующий пути @Requestmapping, изменяется на /list, который был ранее /продуктами.
Обновить веб -клиент
Добавьте новый метод в Productservice в наш веб -клиент:
public String productListzuul () {return this.resttemplate.getForObject ("http: // zuul-server/product/list", string.class);}На этот раз мы напрямую просим сервис Zuul-Server, а затем он передаст наш запрос в службу услуги продукции. Наконец, добавьте метод обработки запросов в ProductController:
@Requestmapping ("/product/list") public String productListzuul () {return productservice.productlistzuul ();}Используется для обработки /продуктового /списка запросов, а затем вызовать методы в классе Productservice.
тест
Используйте MVN Spring-Boot: запустите, чтобы запустить ConfigServer, Registry, Zuulserver, Productservice и веб-проекты, затем запустите второй продукт Service и используйте Server_port = 8082 Spring-Boot: Run.
Посетите http: // localhost: 8080/product/list несколько раз, и в дополнение к тому, чтобы увидеть возвращенные результаты в браузере, мы также увидим следующие слова в окне командной строки Zuulserver:
Получить запрос метода http: // xuqians-imac: 8083/product/list
Затем в командной строке Windows двух Productservices мы также увидим случайные появления
Доступ к конечной точке продуктов
Это означает, что Zuulserver также автоматически загружает балансировку.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.