网关服务搭建zuul

柔情只为你懂 2022-04-25 01:34 366阅读 0赞

项目地址

网关服务搭建zuul

  1. 在spring-cloud项目中新建gateway-server (maven)模块
  2. pom.xml 引入开发包及插件

    <?xml version=”1.0” encoding=”UTF-8”?>



    spring-cloud
    spring-cloud
    1.0-SNAPSHOT

    4.0.0

    gateway-server



    org.springframework.cloud
    spring-cloud-starter-zuul



    org.springframework.cloud
    spring-cloud-starter-eureka



    org.springframework.boot
    spring-boot-starter



    org.springframework.boot
    spring-boot-starter-test
    test








    org.springframework.boot
    spring-boot-maven-plugin



  3. java目录下创建路径(com.springcloud.demo)及启动类 GatewayServerApplication.java

    package com.springcloud.demo;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

    /* 开发公司:青岛海豚数据技术有限公司 版权:青岛海豚数据技术有限公司

    RegisterServerApplication @author 刘志强 @created Create Time: 2019/3/26 */
    @SpringBootApplication
    @EnableEurekaClient
    @EnableZuulProxy
    @EnableAutoConfiguration
    public class GatewayServerApplication implements CommandLineRunner {

    1. private final Logger logger = LoggerFactory.getLogger(this.getClass());
    2. public static void main(String[] args) {
    3. SpringApplication.run(GatewayServerApplication.class, args);
    4. }
    5. @Override
    6. public void run(String... strings) throws Exception {
    7. logger.info("服务器启动成功");
    8. }

    }

  4. 创建配置文件 application.yml

    spring:
    application:

    1. name: gateway-server

    server:
    port: 5003
    zuul:
    sensitive-headers:
    routes:

    1. webService:
    2. path: /provide/**
    3. serviceId: provide-server
    4. appService:
    5. path: /consumer/**
    6. serviceId: consumer-server

    注册中心地址

    eureka:
    client:

    1. serviceUrl:
    2. defaultZone: http://127.0.0.1:5000/eureka/

    instance:

    1. hostname: 127.0.0.1
    2. instance-id: http://127.0.0.1:5003
  5. 使用熔断

    package com.springcloud.demo.config;

    import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.client.ClientHttpResponse;
    import org.springframework.stereotype.Component;

    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;

    /* 开发公司:青岛海豚数据技术有限公司 版权:青岛海豚数据技术有限公司

    MyZuulFallBack 网关熔断 当provide-server 服务没有启动时或访问超时等时会执行 fallbackResponse 方法 @author 刘志强 @created Create Time: 2019/3/26 */
    @Component
    public class MyZuulFallBack implements ZuulFallbackProvider {

    1. @Override
    2. public String getRoute() {
    3. return "provide-server";

    // return ““; 返回 所有的服务都会走此熔断处理

    1. }
    2. @Override
    3. public ClientHttpResponse fallbackResponse() {
    4. return new ClientHttpResponse() {
    5. @Override
    6. public HttpStatus getStatusCode() throws IOException {
    7. return HttpStatus.OK;
    8. }
    9. @Override
    10. public int getRawStatusCode() throws IOException {
    11. return 200;
    12. }
    13. @Override
    14. public String getStatusText() throws IOException {
    15. return "OK";
    16. }
    17. @Override
    18. public void close() {
    19. }
    20. @Override
    21. public InputStream getBody() throws IOException {
    22. return new ByteArrayInputStream("服务器中断连接".getBytes());
    23. }
    24. @Override
    25. public HttpHeaders getHeaders() {
    26. HttpHeaders httpHeaders = new HttpHeaders();
    27. httpHeaders.setContentType(MediaType.APPLICATION_JSON);
    28. return httpHeaders;
    29. }
    30. };
    31. }

    }

  6. 使用过滤器

    package com.springcloud.demo.config;

    import com.netflix.zuul.ZuulFilter;
    import org.apache.commons.lang.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;

    /**

    • 开发公司:青岛海豚数据技术有限公司
    • 版权:青岛海豚数据技术有限公司
    • MyZuulFilter
      *
    • PRE:这种过滤器在请求被路由之前调用。可利用这种过滤器实现身份验证、在集群中选择请求的微服务,记录调试信息等。
      ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netflix Ribbon请求微服务。 POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP header、收集统计信息和指标、将响应从微服务发送给客户端等。
      *ERROR:在其他阶段发送错误时执行该过滤器。
    • @author 刘志强
    • @created Create Time: 2019/3/26
      */
      @Component
      public class MyZuulFilter extends ZuulFilter {
      @Autowired
      public HttpServletRequest httpServletRequest;
      @Autowired
      public HttpServletResponse httpServletResponse;
      @Override
      public String filterType() {

      1. return "pre";

      }

      @Override
      // 过滤顺序
      public int filterOrder() {

      1. return 0;

      }

      @Override
      // true 执行过滤逻辑 false 不执行
      public boolean shouldFilter() {

      1. return true;

      }

      @Override
      // 过滤逻辑处理
      public Object run() {

      1. String auth = httpServletRequest.getHeader("Authorization");
      2. if (StringUtils.isEmpty(auth)) {
      3. PrintWriter writer = null;
      4. String originHeader = httpServletRequest.getHeader("Origin");
      5. httpServletResponse.setHeader("Access-Control-Allow-Origin", originHeader);
      6. httpServletResponse.setCharacterEncoding("UTF-8");
      7. httpServletResponse.addHeader("Access-Control-Allow-Credentials", "true");
      8. httpServletResponse.addHeader("Vary", "Origin");
      9. httpServletResponse.setContentType("application/json; charset=utf-8");
      10. try {
      11. writer = httpServletResponse.getWriter();
      12. writer.append("请求非法");
      13. } catch (IOException e) {
      14. return null;
      15. } finally {
      16. if (writer != null) {
      17. writer.close();
      18. }
      19. }
      20. }
      21. return null;

      }
      }

发表评论

表情:
评论列表 (有 0 条评论,366人围观)

还没有评论,来说两句吧...

相关阅读

    相关 服务:SpringCloud zuul

    一、存在的问题 在之前的文章中,微服务架构已经初具雏形。但还有一些问题:不同的微服务一般会有不同的网 络地址,客户端在访问这些微服务时必须记住几十甚至几百个地址,这对于客

    相关 Zuul服务

    微服务调用过程     前面的博客文章已经介绍过spring cloud的服务的相关内容信息,那么我们回顾一下多个微服务的调用过程。微服务一般会由不同的团队去维护,,那么

    相关 Zuul

    一、Zuul网关简介 1. zuul是spring cloud中的微服务网关。 网关: 是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由