Introdução
Zuul é um roteador baseado em JVM da Netflix e balanceador de carga do lado do servidor. O cenário mais comumente usado é substituir o microsserviço de back-end de proxy reverso do NGINX para o acesso da interface do usuário front-end.
Zuul usa a fita para localizar uma instância que é encaminhada pela descoberta e todas as solicitações são executadas com o comando Hystrix, para que a falha seja exibida na métrica Hystrix.
Nota: Zuul não inclui o cliente Discovery; portanto, para rotas baseadas em ID de serviço, uma das rotas precisa ser fornecida no caminho de classe.
O Zuul é um gateway de API e componente de filtragem fornecido pelo Spring Cloud. Ele fornece as seguintes funções:
Neste tutorial, usaremos o Zuul para encaminhar a solicitação/produto da Web para o serviço de produto correspondente e definir um pré -filtro para verificar se o Zuul foi encaminhado.
Ambiente básico
Código fonte do projeto
Clique aqui
Crie serviço Zuul
Crie um projeto Maven em Intellij:
Em seguida, adicione o seguinte código em pom.xml:
<? xml versão = "1.0" coding = "utf-8"?> <Projeto xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.ww3.org/2001/xmlschaMance xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion> 4.0.0 </GroupVersion> <purid> cn.zxuquqian> art </Groupversion> <vourid> cn.zxuQuq. <Versão> 1.0-SNAPSHOT </Version> <Dor> <PuerpId> org.springframework.boot </foupid> <TRAFACTID> Spring-Boot-Starter-Parent </ArtifactId> <sipers> 2.0.1.release </versão </Parent> <Penerges> <Pendency> <broupId> oug.sringfring! Spring-cloud-starter-zuul-> <TarifactId> Spring-cloud-starter-netflix-zuul </starfactId> </dependency> <pendesency> <puperid> org.springframework.cloud </frupid> <PuerpId> org.springframework.cloud </frupiD> <TRARFACTID> Spring-Cloud-Starter-Config </ArtifactId> </Dependency> <pendency> <puperid> org.springframework.boot </frupid> <stifactid> Spring-boot-starter-actuator </artiftid <GrupId> org.springframework.boot </frupiD> <ArtifactId> primavera-boot-estrelada-web </sutifactId> </dependency> </dependency> </dependency> </dependency> <pendencyManagement> <spendencies> <Pendence> <purbrougid> org.springframework.cloud <ThorifactId> Spring-cloud-Dependências </starfactId> <versão> Finchley.m9 </version> <type> pom </pype> <cope> importar </scope> </dependency> </dependency> </dependencyManagement> </propherties> <nava.version> 1.8 </java.version> <PuerpId> org.springframework.boot </frugiD> <stifactId> primavera-boot-maven-plugin </artifactId> </flugins> </fuild> <positórios> </repository> <dd> spring-mestones </id> <nome> marcos de primavera </name> <url> https://repo.spring.io/libs-milestone </erl> <snapshots> <bilted> false </abilabed> </snapshots> </positório> </repositório> </repositor
Deve-se notar que o Artifactid de Zuul, dado pelo tutorial do site oficial da primavera, é o Spring-Cloud-Starter-Zuul, que é o nome da versão antiga de Zuul. Foi renomeado Spring-Cloud-Starter-Netflix-Zuul em nossa versão Finchley.m9.
Adicione o arquivo src/main/resources/bootstrap.yml e especifique spring.application.name:
Primavera: Aplicação: Nome: Zuul-Server
Crie a classe CN.zxuqian.Application:
package cn.zxuqian;import cn.zxuqian.filters.PreFilter;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.netflix.zuul.enablezuulProxy; importar org.springframework.context.annotation.bean;@enablezuulProxy@habilablediscoveclient@springbootApplicationpublic Application {public STATID Void Main (string [] [] strings) Application (springpplication springpublic {public STATID) (string.] } @Bean Public Prefilter prefilter () {return new prefilter (); }}Aqui @enablezuulProxy é usado para especificar um proxy reverso usando o Zuul e encaminhar nossa solicitação para o servidor correspondente. Então a descoberta de serviço de Eureka foi ativada. O Zuul também usará a faixa de opções para balanceamento de carga por padrão, para que você possa descobrir serviços registrados através do Eureka. O Prefilter é um pré -filtro que executa algumas operações antes que a solicitação seja processada. Seu código é o seguinte:
pacote cn.zxuqian.filters; importar com.netflix.zuul.zuulfilter; importar com.netflix.zuul.context.requestContext; importar com.netflix.zuul.xception.zuulException; importação org.lf4j.portgger; import oug.slf; javax.servlet.http.httpServletRequest; Public Class Prefilter estende o zuulfilter {private static logger log = loggerFactory.getLogger (prefilter.class); @Override public String filterType () {return "pre"; } @Override public int filterOrder () {return 1; } @Override public boolean devefilter () {return true; } @Override public Object run () lança zuulException {requestcontext ctx = requestcontext.getCurrentContext (); HttpServletRequest request = ctx.getRequest (); log.info (string.format (" %s Método solicitar %s", request.getMethod (), request.getRequesturl (). tostring ())); retornar nulo; }} FILTERTYPE - Existem quatro tipos de filtro embutidos em zuul, pré, rota, postagem e erro, que representam antes, durante, depois e após um erro.
FilterOrder - Especifica a ordem em que o filtro é executado.
deve Filter - se deve ativar esse filtro.
Executar - a lógica de negócios do filtro. Aqui, simplesmente registro o método de solicitação e o caminho de solicitação do Reqeust.
Em seguida, crie o arquivo zuul-erver.yml no repositório Git em nosso centro de configuração e adicione a seguinte configuração:
Servidor: Porta: 8083zuul: Rotas: Produtos: Caminho: /Produto /** ServiceId: Serviço de Produto
Aqui, o porto de Zuul está configurado para ser 8083 e, em seguida, todas as solicitações de produto / produto são mapeadas para o nosso serviço de serviço de produto. Se o ServiceId não estiver configurado, a chave de produtos será o ServiceId por padrão. Em nosso exemplo, o serviçoIid inclui -, portanto o serviço é especificado abaixo. Envie ao Git após a conclusão da configuração.
Atualize o ProductService
O URI do ProductService mudou um pouco para torná -lo mais alinhado com o estilo de descanso:
@RequestMapping (" /list") public String ProductList () {Log.info ("Access To /Products Endpoint"); Retorne "casaco, jaqueta, suéter, camiseta";}Aqui, o caminho que corresponde ao @RequestMapping é alterado para /List, que era anteriormente /produtos.
Atualize o cliente da web
Adicione um novo método ao ProductService em nosso cliente da web:
public String ProductListzuul () {return this.resttemplate.getForObject ("http: // zuul-severver/produto/list", string.class);}Desta vez, solicitamos diretamente o serviço Zuul-Server e, em seguida, ele procurará nossa solicitação ao serviço de serviço de produto. Por fim, adicione um método de manuseio de solicitação no ProductController:
@RequestMapping ("/Product/List") public String ProductListzuul () {return ProduckService.productListzuul ();}Usado para processar /produzir /listar solicitações e, em seguida, chamar métodos na classe ProductService.
teste
Use MVN Spring-Boot: Execute para iniciar projetos de configuração, registro, zuulsserver, serviços de produtos e web, inicie o segundo serviço de produtos e use server_port = 8082 Spring-boot: execute.
Visite http: // localhost: 8080/Produto/Lista várias vezes e, além de ver os resultados retornados no navegador, também veremos as seguintes palavras na janela da linha de comando do Zuulserver:
Get Método Solicitação http: // xuqians-imac: 8083/Produto/Lista
Então, nas janelas da linha de comando dos dois serviços de produtos, também veremos aparências aleatórias
Acesso ao endpoint /produtos
Isso significa que o Zuulserver também carregará o balanceamento automaticamente.
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.