5_spring-cloud-zuul-网关


网关, 链路追踪

  • Zuul;
  • Sleuth;
  • https://start/aliyun.com
  • Zuul是Netflix开源的微服务网关,核心是一系列过滤器;
  • zuul默认集成了ribbon和hystrix;
  • 路由请求
  • 权限认证

Zuul

  • 新建项目,引入依赖:需要使用 eureka-client-获取注册信息
<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-netflix-zuul</artifactId>
</dependency>
  • 完整pom:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.go.cn</groupId>
    <artifactId>zuul-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>zuul-server</name>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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-netflix-zuul</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • @EnableZuulProxy
  • 配置文件修改:
server:
  port: 80
spring:
  application:
    name: zuul-server

eureka:
  client:
    service-url:
      defaultZone: http://euk1.com:7000/eureka/

  • curl: 端口/服务名/uri;

zuul 原理

  • 隧道模式; 代理模式;
  • 拒绝策略前置; 卫语句;
  • 网关会将服务名转换成具体服务的ip和端口;

负载均衡设置

  • 默认负载策略为轮询策略;
  • 负载均衡配置文件调整:根据服务名调整:
provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  # 使用随机策略

配置指定服务的路由

  • 相当于一个别名,之前使用的 /服务名/** 依旧可用来访问;
zuul:
  routes:
    consumer: /consumer-api/**
    # 或者
    # serviceId: consumer
    # path: /consumer-api/**

重定向:

  • 相当于给任意路径指定路由;相当于一个映射;
  • 此配置的优先级于服务名,也就是说指定的 url如果和服务同名会调用具体服务;不会走指定的url;
zuul:
  routes:
    xx:
      path: /xx/**
      url: http://www.baidu.com
    search:
      path: /search/**
      url: http://www.baidu.com    

忽略服务,禁止直接请求

  • 直接从网关请求会报404,但是 consumer 还是可以调用;
zuul:
  ignored-services: provider

前缀配置

  • 前缀,当请求匹配前缀时会进行代理;
  • 前缀配置会应用到所有路径;包括 注册的服务,也包括上面重定向中自定义的 url 路径;
zuul:
  prefix: /api/v1
  # 是否带上前缀请求,代理前缀默认会从请求路径中移除,通过该设置关闭移除功能,
  # 默认为 true-不带前缀
  # false-带前缀相当于被代理项目要有这个前缀
  strip-prefix: false  

暴露路由端点

  • 添加依赖:默认已经集成了actuator

  • 配置文件调整:暴露端点;

management:
  endpoint:
    health:
      enabled: true
      show-details: always
    routes:
      enabled: true
  endpoints:
    web:
      exposure:
        include: '*'
  • curl http://localhost/actuator/routes: 可以查看路由的映射结果;例如上边 前缀配置的生效范围就可以使用此路径进行查看:

  • {
        "/api/v1/consumer-api/**":"consumer",
        "/api/v1/xx/**":"http://www.baidu.com",
        "/api/v1/search/**":"http://www.baidu.com",
        "/api/v1/provider/**":"provider",
        "/api/v1/consumer/**":"consumer"
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值